我现在才开始玩异步并等待。我有8个单独的数据库调用,其中一些依赖于其他数据库。我希望能够启动3个异步方法,然后当某个返回1时,启动其他3个,然后当某个返回1时,再启动2个。我目前正在使用3个Parallel.Invoke方法来完成此操作,但是每个并行都必须等待所有方法返回。我只关心返回的一种方法,其他方法可以在后台运行,直到await Task.WhenAll(t1,t2,t3,...,t6)
最后一个。有没有办法通过异步/等待来实现这一目标?
我知道await不会阻塞,但是它将停止执行我的main方法(带有8个db调用),直到该方法返回值为止(就像同步方法一样)。
您可以Task.WhenAny
用来等待以下任一项任务:
var completedTask = await Task.WhenAny(t1, t2, t3, ...);
如果您有一个更复杂的依赖关系结构,那么我建议使用如下async
方法来表示:
static async Task DoMasterOperationAsync()
{
var result = await StartSomething();
await Task.WhenAll(DoComplexOperationAsync(), result.NextT1Async());
}
static async Task DoComplexOperationAsync()
{
var result1 = await T1Async();
await Task.WhenAll(result1.NextT1Async(), result1.NextT2Async(), result1.NextT3Async());
}
await Task.WhenAll(DoMasterOperationAsync(), t2, t3, ...);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句