非同期プログラミングにおける
との重要な違いawait Task.Run(); return;とreturn Task.Run();
の違いを理解することは非常に重要です。これらの2つの構造は似ていますが、それらの行動は本質的に異なります:
await Task.Run();
return Task.Run();
有意な違いは、その異常な普及です。非同期
オブジェクトに保存され、タスクが観察される前に状態が観察されます。代わりに、非エキゾチックメソッドでは、スローの異常が同じスレッドですぐにトリガーされ、キャプチャが容易になります。 同期コンテキスト知覚:
Task
非同期メソッドは、現在の同期コンテキストを本質的に知覚します。 ステートメントに遭遇すると、操作は現在のコンテキストで配置され、UIに関連する操作がUIスレッドで実行されるようにします。ただし、非同期メソッドにはそのような認識はありません。これは同期の問題を引き起こす可能性があります。 Task
Task
死んだロックの可能性:
場合によっては、UIスレッドでを呼び出すと、デッドロックにつながる可能性があります。これは、スレッドがブロックされており、
が完了するのを待っているため、UIが更新されるのを効果的に防止しているためです。タスクを実行してこの問題を避けてください。 Task
await
コードの違い:Task
および生成コード。前者は非同期状態を生成し、後者はオブジェクトを作成します。非同期状態マシンにより、タスクが完了した後、メソッドを掛けて回復させることができます。
要するに、await Task.Run()
とTask
は文法に類似点があるかもしれませんが、行動の違いは重要です。 2つを選択するときは、異常な普及、同期のコンテキスト知覚、およびデッドロックの可能性を考慮してください。 return Task.Run()
以上がawait task.run();戻る; vs. return task.run():非同期プログラミングの重要な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。