public void SetToWriteMode() { if (_mode == TcpReaderSwitchMode.Stopped) { throw new Exception("Service is stopping"); } lock (_lockObject) { if (_mode == TcpReaderSwitchMode.Write) { return; } _mode = TcpReaderSwitchMode.Write; if (_writeModeAwaiter == null) { return; } var result = _writeModeAwaiter; _writeModeAwaiter = null; result.SetResult(0); } }
public void Stop() { lock (_lockObject) { _mode = TcpReaderSwitchMode.Stopped; if (_readModeAwaiter != null) { var readModeAwaiter = _readModeAwaiter; _readModeAwaiter = null; readModeAwaiter.SetException(new Exception("We are stopping")); } if (_writeModeAwaiter != null) { var writeModeAwaiter = _writeModeAwaiter; _writeModeAwaiter = null; writeModeAwaiter.SetException(new Exception("We are stopping")); } } }