protected override void Dispose(bool disposing)
{
if (disposing)
{
var oldState = Interlocked.Exchange(ref _state, State.Disposing);
switch (oldState)
{
case State.Connected:
Shutdown();
break;
case State.Closed:
case State.Disposing:
// No-op
break;
case State.Disposed:
Interlocked.Exchange(ref _state, State.Disposed);
break;
default:
break;
}
}
base.Dispose(disposing);
}