【发布时间】:2015-10-18 01:06:38
【问题描述】:
我有一个关于等待/异步的问题,以及在与预期略有不同的场景中使用异步方法,例如不直接等待它们。例如,假设我有两个需要并行完成的例程,它们都是异步方法(它们内部有等待)。我正在使用await TAsk.WhenAll(...),它反过来期望某种任务列表等待。我所做的是这样的:
await Task.WhenAll(new Task[]
{
Task.Run(async () => await internalLoadAllEmailTargets()),
Task.Run(async () => await internalEnumerateInvoices())
});
这对我来说似乎过于复杂,因为我正在创建异步任务,其唯一目的是调用另一个任务。我不能只使用从异步方法状态引擎返回的任务吗?然而,我没有这样做,因为编译器将每个直接提到的异步方法都视为一个调用点:
// this doesn't seem to work ok
await Task.WhenAll(new Task[]
{
internalLoadAllEmailTargets(),
internalEnumerateInvoices()
});
这样的话,好像是一个接一个的同步调用,如果我把await放在method前面,就不再是Task了。是否有一些关于如何在普通等待之外处理异步方法的规则书?
【问题讨论】:
标签: c# .net multithreading asynchronous async-await