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; 解决方法
不,没有这样的情况. 在这两种情况下,都会创建一个任务,该任务将在task1和task2完成时完成. 因此,当你写: var result1 = await task1; var result2 = await task2; 代码将同步执行.您不必等待某事,因为您同时完成了task1和task2. 对于第二个示例,同样适用于您尝试获取结果的位置. var result1 = task1.Result; var result2 = task2.Result; 由于任务已经完成,因此不会阻塞任何线程调用线程或进行任何上下文切换等. 更新 这两种方法之间存在的唯一功能差异是错误处理不同.等待只是解开一个AggregateException,而.Result只会引发异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |