ホームページ >バックエンド開発 >C++ >Await と Result: C# 非同期タスクで `.Result` の代わりに `await` を使用する必要があるのはどのような場合ですか?

Await と Result: C# 非同期タスクで `.Result` の代わりに `await` を使用する必要があるのはどのような場合ですか?

DDD
DDDオリジナル
2025-01-22 22:51:09744ブラウズ

Await vs. Result: When Should You Use `await` Instead of `.Result` in C# Async Tasks?

C# 非同期タスクの await.Result の選択

Stephen Cleary の『C# Concurrent Programming Handbook』で、次のテクニックが私の注意を引きました。

<code class="language-csharp">var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
  return null;
return await downloadTask;</code>

downloadTask はタイムアウトなしで完了するはずなので、なぜ直接 await に戻る代わりに 2 回目の downloadTask.Result を実行する必要があるのでしょうか?

await に対する .Result

の利点

著者は、await (または .Result) ではなく Wait を使用する 2 つの主な理由を強調しています:

  1. 例外処理: await は例外を AggregateException でラップせず、より明確な例外処理メカニズムを提供します。
  2. デッドロックを回避する: 非同期メソッド内で .Result または Wait を使用すると、デッドロックや微妙なランタイムの問題が発生する可能性があります。

ユーザーガイド

.Result または Wait の使用は完全に禁止されているわけではありませんが、次のガイドラインが推奨されます。

  • 非同期アプリケーション コード: 常に を使用します。 await
  • 非同期ユーティリティ ライブラリ: または .Result とともに使用する場合は、注意して適切なドキュメントを用意してください。 Wait
  • 並列タスク コード: 非同期並列タスクには、.Result が適しています。 Wait
これらのガイドラインに従うことで、開発者は例外処理を改善し、デッドロックを防止し、より堅牢で保守しやすい非同期コードを作成できます。

以上がAwait と Result: C# 非同期タスクで `.Result` の代わりに `await` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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