は、ReceiveMessageメソッドはBeginRead()
を呼び出しますしかし、私はObjectDisposedExceptionを取得しています。れるtcpClientとNetworkStream処分問題
解決策はストリームをもう必要としないときにstream.Dispose()を呼び出すことですが、実際にはusing
節の使用を維持できる解決策を探しています。
using (var client = _listener.EndAcceptTcpClient(ar))
{
var clientStream = client.GetStream();
using (var eh = new ManualResetEvent(false))
{
// Get the request message
Messages.ReceiveMessage(clientStream, msg =>
{
ProcessRequest(msg, clientStream);
eh.Set();
});
eh.WaitOne();
}
}
1つの警告: - ので、それは再利用できるように(クラスのインスタンス)どこでも良識があるのならば、そう、ManualResetEventを格納するためにあなたがこれを行うことができます
おかげ
ManualResetEventはIDisposableを実装していますので、このパターンはusingステートメントでラップする必要があります。 – Joe
これは、非同期プロセスが完了するまで基本的にブロックしているので、データの非同期処理を「中断」します。それはすべての状況において望ましくないかもしれません。 –
私はこの制限内で質問に答えました。 :-) JoeはManualResetEventの使用について()を使用する権利を持っています。 –