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 つの主な理由を強調しています:
await
は例外を AggregateException
でラップせず、より明確な例外処理メカニズムを提供します。 .Result
または Wait
を使用すると、デッドロックや微妙なランタイムの問題が発生する可能性があります。 ユーザーガイド
.Result
または Wait
の使用は完全に禁止されているわけではありませんが、次のガイドラインが推奨されます。
await
.Result
とともに使用する場合は、注意して適切なドキュメントを用意してください。 Wait
.Result
が適しています。 Wait
以上がAwait と Result: C# 非同期タスクで `.Result` の代わりに `await` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。