および:デッドロックのtrap await
Task.Wait
非同期プログラミングでは、と
await
Task.Wait
:同期ブロッキングTask.WaitAll
タスクが完了するまで現在のスレッドを同時にブロックします。サンプルコードでは、メソッドによって返される10のタスクが完了するのを待っています。これにより、スレッドがブロックされ、フォローアップ操作が実行されないようになります。 Task.Wait
Task.Wait
を待っています
Task.WaitAll
許容方法は、タスクが非同期を待っている間に、未完成のタスクを発信者に返します。タスクが完了すると、メソッド内の残りのコードが順守されるようにスケジュールされます。 Ros()
メソッドは非同期メソッドを呼び出し、一連の非同期操作を作成します。これにより、タスクがスレッドの完了とリリースを効果的に妨げました。その結果、メソッドは決して終了しないため、死んだロックが生じます。
通常、非同期コードで閉塞を使用することはお勧めしません。ブロッキングが発生すると、スレッドはインレットリクエストを処理できず、パフォーマンスが低下し、デッドロックロックになる可能性があります。
await
Get
Task.WaitAll
の理解とRos
の違いは、死んだロックを回避し、非同期プログラミングの効果的な使用に不可欠です。 Foo
同期する必要がある特定のシーンでのみ使用する必要があります。ほとんどの場合、「完全な非同期」方法を使用してBar
を使用して非同期を維持し、コード全体のブロッキング問題を防ぐことをお勧めします。 Get
以上が待っているvs.タスク。ウェイト:同期ブロッキングはいつデッドロックを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。