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

Geo*_*uer 3 .net c# task-parallel-library async-await

假设我有两个异步函数

Result1 result1 = await getResult1();
Result2 result2 = await getResult2();
doSomething(result1, result2);
Run Code Online (Sandbox Code Playgroud)

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

问题1:那会发生什么?

问题2:如果没有,我如何做到这一点,假设Result1并且Result2没有共享基类型,因此我无法使用Task.WhenAll()

Ser*_*rvy 7

这是怎么回事?

await只是意味着,或多或少,"不继续执行代码,直到下面的任务已经完成".

我该如何做到这一点

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

var firstTask = getResult1();
var secondTask = getResult2();
await Task.WhenAll(firstTask, secondTask);
doSomething(firstTask.Result, secondTask.Result);
Run Code Online (Sandbox Code Playgroud)