加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:46:39 所属栏目:百科 来源:网络整理
导读:参见英文答案 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,ta
参见英文答案 > 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只会引发异常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读