If the underlying network channel is unexpectedly closed, then in Channel_Closed the _channel member is set to null. This can result in a NullReferenceException when the background read thread attempts to send any new data.
Also _dataReaderTaskCompleted has a similar problem.