异步方法是否并行运行?

我有一个异步方法,它包含对异步方法的多个调用。调试时,我注意到它按顺序运行,但我希望它并行运行,因为它是异步方法。我是 C# 新手,也许我误解了一些东西。也许在运行时它并行运行?

这不是我的真实代码,而是为了简化而绘制的插图:

public async Task<Foo> GetFoo()
{
    var a = await Get1();
    var b = await Get2();
    var c = await Get3();

    //Do some stuff
 }
shehuan 回答:异步方法是否并行运行?

此代码按顺序运行。

为了让它并行运行,你应该这样做:

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

本文链接:https://www.f2er.com/5680.html

大家都在问