// This will set the underlying OS handle to be nonblocking, for whatever reason --
 // performing an async operation or using a timeout will cause this to happen.
 // Once the OS handle is nonblocking, it never transitions back to blocking.
 private void SetHandleNonBlocking()
 {
     // We don't care about synchronization because this is idempotent
     if (!_underlyingHandleNonBlocking)
     {
         AsyncContext.SetNonBlocking();
         _underlyingHandleNonBlocking = true;
     }
 }
 public void SetNonBlocking()
 {
     _asyncContext.SetNonBlocking();
 }