多くの API は、非同期メソッドのみを公開する方向に進んでいます。これらのメソッドをすぐに待機する必要があるシナリオでは、どの程度のパフォーマンス ヒットが発生しますか? 現在のスレッドが、生成されたスレッドの完了を待機すると仮定するのは間違っていますか? それとも、CLR はこれらのシナリオである種の魔法を実行し、すべてを同じスレッドで実行するのでしょうか?
質問する
206 次
1 に答える
3
「非同期メソッド」とは、Task<T>
ベースの非同期メソッドを意味すると思います。
したがって、 a を返すメソッドがあり、Task<T>
すぐにそのWait()
メソッドを呼び出すと、 current が内部WaitHandle
オブジェクトで待機します。タスクは別のスレッドで実行される可能性が高く、完了するとシグナルが送信WaitHandle
され、待機中のスレッドが解放されます。このシナリオを私が認識している同期呼び出しに変えるコンパイラーの最適化はありません。
もちろん、これは非同期メソッドと同等の同期メソッドを呼び出すよりも多くの作業です。ただし、ユースケースによっては、おそらく大きな違いはありません。
より重要な質問は、呼び出し元のスレッドをブロックすることで、なぜ非同期の利点を失いたいのかということです。これは一般的には良い考えではありません。これを行う十分な理由があることを確認する必要があります。
于 2013-10-26T04:31:43.550 に答える