ホームページ >バックエンド開発 >C++ >waing task.run()vs。return task.run():C#非同期プログラミングの重要な違いは何ですか?

waing task.run()vs。return task.run():C#非同期プログラミングの重要な違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-30 03:51:14440ブラウズ

Await Task.Run() vs. Return Task.Run(): What are the Key Differences in C# Asynchronous Programming?

c#非同期プログラミング

await Task.Run() return Task.Run()の重要な違い

非同期プログラミングでは、アプリケーションの適用を回避するためにUIスレッドの外部で操作を実行する必要があることがよくあります。これは、C#のタスクを通じて実現できます。ただし、異常やその他の側面を扱う際には、

await Task.Run()の間には微妙な違いがあります。 return Task.Run()

主な違いは、その異常なコミュニケーションです。 状況: 非同期タスクの異常は、タスクを待っている場合にのみコールバックメソッドを拡大します。

これにより、制御された方法で異常に対処して、UIスレッドに誤って投げかけるのを防ぐことができます。 await Task.Run()

それどころか、場合はで:
  • タスクの実行中に投げられた異常は、すぐにコールメソッドに戻され、タスクを観察する前でさえも。
  • これは、偶発的なエラーや潜在的なデッドロックにつながる可能性があります。

return Task.Run()2。同期コンテキストへの依存:

  • 別の違いは、
  • バージョンは、呼び出しスレッドの同期コンテキストに依存することです。タスクが完了すると、同じ同期コンテキストで実行されます。これにより、UIアップデート(無効ボタンの有効化など)が正しいスレッドで発生することが保証されます。
  • それどころか、
  • バージョンは同期のコンテキストに依存しません。デフォルトのタスクスケジューリングプログラムの配置を継続します。これは、呼び出しスレッドの同期コンテキストとは異なる場合があります。

2つの方法によって生成されたコードはわずかに異なります。 の場合、非同期実行を管理するために、async/awaitステータスマシンが作成されます。これにより、よりも複雑なコードが発生します。

コードの例:

await Task.Run()

次のコードの例は、これらの違いを示しています:

return Task.Run()例1:

例2:

await Task.Run() return Task.Run()これら2つの例では、「dosomework()」は、UIスレッドの外で特定のジョブを実行する方法です。

結論:

および

の選択は、アプリケーションの特定のニーズに依存します。異常な普及を制御し、正しい同期コンテキストを確保することが重要な場合、

を使用することをお勧めします。異常を広めたり、コンテキストをすぐに同期させるのが問題でない場合、

が適しています。

以上がwaing task.run()vs。return task.run():C#非同期プログラミングの重要な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。