Код
Socket.cs имеет автомарную запись в Dispose:
// Make sure we're the first call to Dispose
if (Interlocked.CompareExchange(ref _disposed, 1, 0) == 1)
{
return;
}
Но само чтение _disposed происходит не автомарно
private int _disposed; // 0 == false, anything else == true
internal bool Disposed => _disposed != 0;
private void ThrowIfDisposed()
{
if (Disposed)
{
ThrowObjectDisposedException();
}
}
Гарантируется ли в C# работоспособность этого кода ?
Не нужен ли где-нибудь volatile, Volatile.Read или Interlocked.Read ?