0

私はネットワーク ライブラリを実装しており、それを非同期にしています (async/await ではなく、beginxxx-endxxx を使用)。また、次のように実装する予定の同期メソッドをいくつか残したいと思います

xxx()
{
    var r=BeginXXX();
    EndXXX(r);
}

async/await で同様のことを行うのは悪い考えであり、デッドロックが発生することはわかっています。

これは Begin/End で良い考えですか、それともストリーム/kill アプリのパフォーマンスに何らかの問題を引き起こしますか?

4

1 に答える 1

1

同期操作を行うこの方法は、特にメモリ割り当てに関して、パフォーマンスが低下します。また、(通常は)をすぐにブロックするには、IAsyncResultを割り当てる必要がAsyncWaitHandleあるため、リクエストごとに追加のカーネル オブジェクトも割り当てます。

最終的には、必要な同期アプリのパフォーマンスに依存します。これが汎用で広く使用されているライブラリ (例: System.Net.Sockets.Socket) である場合は、絶対にこのアプローチをとるべきではありません。それが単なる基本的なライブラリであり、極端なシナリオをサポートする必要がない場合は、おそらくこのようなラッパーを使用できます。

于 2013-09-03T12:17:32.343 に答える