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