这会异步运行吗?

时间:2019-03-27 03:01:29

标签: c# .net async-await task-parallel-library

我正在进行两个可以(理想情况下)同时运行的调用。最终,第一个调用命中数据库,第二个调用Web API。问题是两个执行路径都不是异步的。我一直在尝试更加熟悉TPL,但目前还没有。如果我将两个方法调用包装在Tasks中,然后等待它们,这是否真的可以同时执行?

1 个答案:

答案 0 :(得分:2)

您将async异步等待模式)和异步混淆了,是的,您可以使两者同时运行异步 任务和/或异步等待模式,前提是它们互不依赖

public async Task DoMagicStuff()
{       
    var task1 = DoDbAsync(); // Start Task
    var task2 = DoWebAsync();// Start Task

    // wait for both
    await Task.WhenAll(task1,task2);
}

IO CPU绑定的混合物

public async Task DoMagicStuff()
{

    var task1 = DoDbAsync(); // Start Task
    var task2 = Task.Run(() => DoWebAsync());// Start Task

    // wait for both
    await Task.WhenAll(task1,task2);
}

或没有任何async的情况下,您可以使用Task.WaitAll