5

質問の数、フォーラムの投稿などに基づくと、BCLのTcpClient / NetworkStream実装には、IO操作をキャンセルするための適切なサポートが不足しているようです。.NET 4.5に非同期メソッドが追加されたことで、このキャンセルの欠如(または適切なタイムアウトサポート)により、IOの実行中にCancellationTokenの監視を拒否するタスクをキャンセルすることがさらに複雑になる(ほぼ不可能になる)ため、事態はさらに苛立たしくなります。 。

ネットワーク操作を監視し、問題が発生しているように見える場合は基になるストリームを閉じるために、追加のスレッドを起動する多くの実装を見てきました。非同期操作を使用してこれらのリソースを節約しようとしている世界では、これは非常に汚い感じがします。

ネットワークIO操作を効率的にキャンセル/タイムアウトすることに関するガイダンスの方向、または実際に機能する堅牢なサードパーティの実装に向けて、誰かが私を導くことができますか?

4

1 に答える 1

4

IOのキャンセルは簡単ではありません。Vista以降、CancelIO機能がありますが、これはかなり新しいことであり、ドライバーはそれをサポートする必要があります。

実際には、ソケットを閉じてすべてをキャンセルするのが最善の方法です。または、CancellationTokenが設定されたときに即座に完了するタスクのラッパー関数を実装することもできます。IO操作は引き続き続行されますが、その結果は破棄されます。

この問題に関する徹底的な議論は次のとおりです。http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187

于 2012-06-07T10:44:58.743 に答える