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