c# – 在已知的已完成任务上调用.Result或等待是否有区别?

c# – 在已知的已完成任务上调用.Result或等待是否有区别?,第1张

概述参见英文答案 > Await on a completed task same as task.Result?                                    2个 以下代码块中是否存在任何功能,性能或死锁差异风险? 例1: await Task.WhenAll(task1, task2); var result1 = await task1; var result2 = 参见英文答案 > Await on a completed task same as task.Result?2个
以下代码块中是否存在任何功能,性能或死锁差异风险?

例1:

await Task.WhenAll(task1,task2); var result1 = await task1; var result2 = await task2;

例2:

await Task.WhenAll(task1,task2); var result1 = task1.Result;var result2 = task2.Result;
解决方法

Is there any functional,performance,or risk of deadlock difference in the below code blocks?

不,没有这样的情况.

在这两种情况下,都会创建一个任务,该任务将在task1和task2完成时完成.

因此,当你写:

var result1 = await task1; var result2 = await task2;

代码将同步执行.您不必等待某事,因为您同时完成了task1和task2.

对于第二个示例,同样适用于您尝试获取结果的位置.

var result1 = task1.Result;var result2 = task2.Result;

由于任务已经完成,因此不会阻塞任何线程调用线程或进行任何上下文切换等.

更新

这两种方法之间存在的唯一功能差异是错误处理不同.等待只是解开一个AggregateException,而.Result只会引发异常.

总结

以上是内存溢出为你收集整理的c# – 在已知的已完成任务上调用.Result或等待是否有区别?全部内容,希望文章能够帮你解决c# – 在已知的已完成任务上调用.Result或等待是否有区别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1252133.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存