C#异步任务中await
与.Result
的选择
在Stephen Cleary的《C#并发编程手册》中,一种技巧引起了我的注意:
<code class="language-csharp">var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask;</code>
既然downloadTask
如果没有超时就已经完成了,为什么还要进行第二次await
而不是直接返回downloadTask.Result
呢?
await
优于.Result
的优势
作者强调了优先使用await
而不是.Result
(或Wait
)的两个主要原因:
await
不会将异常包装在AggregateException
中,从而提供更清晰的异常处理机制。.Result
或Wait
可能导致死锁或细微的运行时问题。使用指南
虽然并非完全禁止使用.Result
或Wait
,但建议遵循以下指南:
await
。.Result
或Wait
,并提供充分的文档说明。.Result
和Wait
是合适的。遵循这些指南,开发者可以改进异常处理,防止死锁,并编写更健壮、更易维护的异步代码。
以上是Await 与 Result:何时应该在 C# 异步任务中使用 `await` 而不是 `.Result`?的详细内容。更多信息请关注PHP中文网其他相关文章!