await关键字能否产生并行代码?

时间:2013-11-04 21:39:53

标签: c# .net task-parallel-library async-await

假设我有两个异步函数

Result1 result1 = await getResult1();
Result2 result2 = await getResult2();
doSomething(result1, result2);

理想情况下,我希望编译器分析我的方法看到getResult2()不依赖于getResult1()的结果,并将其编译为调度两者同时运行的代码,等待之前两者的结果仍在进行中。

问题1:这是怎么回事?

问题2:如果没有,假设Result1Result2没有基本类型,我就不能使用Task.WhenAll() < / p>

2 个答案:

答案 0 :(得分:7)

  

这是怎么回事?

没有。 await或多或少意味着“在完成以下任务之前不要继续执行代码”。

  

如何实现这一目标

首先启动两个任务,然后等待它们完成:

var firstTask = getResult1();
var secondTask = getResult2();
await Task.WhenAll(firstTask, secondTask);
doSomething(firstTask.Result, secondTask.Result);

答案 1 :(得分:4)

  1. 不,在您的代码中,您在开始第二次操作之前等待第一个结果。

  2. 首先启动这两项任务,然后等待它们:

    Task<Result1> task1 = getResult1();
    Task<Result2> task2 = getResult2();
    doSomething(await task1, await task2);