3

假设我有两个异步函数

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

理想情况下,我希望编译器分析我的方法,发现getResult2()不依赖于结果getResult1()并将其编译为安排两者同时运行的代码,等待两者的结果再继续。

问题1:会发生这种情况吗?

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

4

2 回答 2

7

是这样吗?

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

我怎样才能做到这一点

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

var firstTask = getResult1();
var secondTask = getResult2();
await Task.WhenAll(firstTask, secondTask);
doSomething(firstTask.Result, secondTask.Result);
于 2013-11-04T21:42:22.903 回答
4
  1. 不,在您的代码中,您正在等待第一个结果,然后再开始第二个操作。

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

    Task<Result1> task1 = getResult1();
    Task<Result2> task2 = getResult2();
    doSomething(await task1, await task2);
    
于 2013-11-04T21:42:13.907 回答