protected override void Dispose(bool disposing)
{
if (disposing && Interlocked.Exchange(ref _cleanedUp, 1) == 0)
{
if (_readTaskCompletionSource != null)
{
_readTaskCompletionSource.TrySetCanceled();
}
if (_writeTaskCompletionSource != null)
{
_writeTaskCompletionSource.TrySetCanceled();
}
if (_readEventArgs != null)
{
_readEventArgs.Dispose();
}
if (_writeEventArgs != null)
{
_writeEventArgs.Dispose();
}
try
{
_inputStream.Close();
}
finally
{
_outputStream.Close();
}
}
}