假设我有两个异步函数
Result1 result1 = await getResult1();
Result2 result2 = await getResult2();
doSomething(result1, result2);
理想情况下,我希望编译器分析我的方法看到getResult2()
不依赖于getResult1()
的结果,并将其编译为调度两者同时运行的代码,等待之前两者的结果仍在进行中。
问题1:这是怎么回事?
问题2:如果没有,假设Result1
和Result2
没有基本类型,我就不能使用Task.WhenAll()
< / p>
答案 0 :(得分:7)
这是怎么回事?
没有。 await
或多或少意味着“在完成以下任务之前不要继续执行代码”。
如何实现这一目标
首先启动两个任务,然后等待它们完成:
var firstTask = getResult1();
var secondTask = getResult2();
await Task.WhenAll(firstTask, secondTask);
doSomething(firstTask.Result, secondTask.Result);
答案 1 :(得分:4)
不,在您的代码中,您在开始第二次操作之前等待第一个结果。
首先启动这两项任务,然后等待它们:
Task<Result1> task1 = getResult1();
Task<Result2> task2 = getResult2();
doSomething(await task1, await task2);