c#非同期プログラミング:タスクのデッドロックリスク。
C#非同期プログラミングでは、との違いを理解することは非常に重要です。どちらも非同期操作を同期するために使用されますが、糸の動作を実現することの影響は非常に異なります。
たとえば、 Task.Wait
メソッドがawait
を使用して複数のタスクが完了するのを待つ場合、この同期閉塞方法は死んだロックにつながる可能性があります。なぜなら、メソッドと非同期タスクが同じスレッドで待っているからです。スレッドは、ブロック後に非同期タスクを継続することはできず、死んだロックを引き起こします。
は非同期待機メカニズムです。 GET
式に遭遇すると、それを含む方法は「一時停止」し、未完成のタスクを発信者に返します。これにより、発信者は実行を継続できますが、Task.WaitAll
式は非同期です。 式が完了すると、メソッドの残りの部分がフォローアップ操作のために配置されます。 GET
要するに、現在のスレッドを同期させると、非同期のタスクで使用されると死んだロックが発生する可能性があります。非同期シーンでの死んだロックを避けるために、「完全な非同期」戦略を使用し、同期非同期操作の好ましいメカニズムとして
以上がTask.Wait vs.待ち望:非同期待機がデッドロックにつながるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。