这 运行 会异步吗?
Would this run async?
我正在进行两个可以(理想情况下)同时 运行 的调用。第一次调用最终访问数据库,第二次访问 Web API。问题是两个执行路径都不是异步的。我一直在尝试更熟悉 TPL,但还不够熟悉。如果我将这两个方法调用包装在 Tasks 中并等待它们,这真的会同时执行吗?
你混淆了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
我正在进行两个可以(理想情况下)同时 运行 的调用。第一次调用最终访问数据库,第二次访问 Web API。问题是两个执行路径都不是异步的。我一直在尝试更熟悉 TPL,但还不够熟悉。如果我将这两个方法调用包装在 Tasks 中并等待它们,这真的会同时执行吗?
你混淆了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