我有一个异步方法,它包含对异步方法的多个调用。调试时,我注意到它按顺序运行,但我希望它并行运行,因为它是异步方法。我是 C# 新手,也许我误解了一些东西。也许在运行时它并行运行?
这不是我的真实代码,而是为了简化而绘制的插图:
public async Task<Foo> GetFoo()
{
var a = await Get1();
var b = await Get2();
var c = await Get3();
//Do some stuff
}
答案 0 :(得分:3)
此代码按顺序运行。
为了让它并行运行,你应该这样做:
public async Task<Foo> GetFoo()
{
var a = Get1();
var b = Get2();
var c = Get3();
await Task.WhenAll(a, b, c);
//Do some stuff
}
我从每次调用中删除了 await
(从名称中您可以得到它等待方法完成的提示)。并将 await 移到后面的步骤并使用其他方法。这使得所有这些方法可以并行运行。
注意,var 将用 Task
包裹,为了获得它的值,您必须执行 a.Result
。