Jon*_*lis 2 c# task async-await
我有两个可以并行运行的任务来提高性能:
var task1 = _service.DoStuffAsync();
var task2 = _service.DoOtherStuffAsync();
await Task.WhenAll(task1, task2);
Run Code Online (Sandbox Code Playgroud)
现在,我确信这些任务已经完成.但根据我的理解(以及一些现实生活中的麻烦),如果我呼吁.Result完成这些任务,即使它们完整,我也可能造成僵局?
从我正在阅读的内容来看,await完成的任务只会返回结果,所以看起来就是这样的方式.这使我的代码看起来很时髦:
var task1 = _service.DoStuffAsync();
var task2 = _service.DoOtherStuffAsync();
await Task.WhenAll(task1, task2);
var result1 = await task1;
var result2 = await task2;
Run Code Online (Sandbox Code Playgroud)
这是解决此问题并获得我的任务结果的正确方法吗?如果没有,问题是什么?有没有更好的方法来打开任务而不需要.Result它们?
如果我打电话.Result在这些任务上,即使它们完整,我也可能造成僵局?
不,你不能.如果任务完成,Result则不会阻止,它将立即返回,但更重要的是,当它已经完成时,您无法阻止等待完成的任务.
这是解决此问题并获得我的任务结果的正确方法吗?
它肯定会奏效.你当然是对的,它看起来很傻,因为你冗余地等待任务两次(第二次实际上不会花费任何时间,因为它们已经完成,你只需输入代码等待它们两次).您可以省略冗余代码,只需等待一次:
var task1 = _service.DoStuffAsync();
var task2 = _service.DoOtherStuffAsync();
var result1 = await task1;
var result2 = await task2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |