我现在刚开始使用async和await。我有8个不同的数据库调用,一些是依赖于其他的。我想要启动3个异步方法,当某一个方法返回时,再启动另外3个异步方法,然后再当某一个方法返回时,再启动2个异步方法。我目前正在使用3个Parallel.Invoke方法来实现这个,但是每个并行必须等待所有方法返回。我只关心1个方法返回,其余可以在后台运行,直到最后使用
await Task.WhenAll(t1,t2,t3,...,t6)
。 有没有一种方式可以使用async/await来实现呢?
我知道await不会阻塞,但它会停止我的主方法(具有8个数据库调用)的执行,直到从方法中返回值(就像同步方法一样)。
Task.Run
将创建一个新的Task
,必须在线程池上执行。在这种情况下,它只是有更多的开销。与额外的线程池任务相比,额外的 POCO 实例是便宜的。 - Stephen Clearyvar parallelOperations = new List<Task>();
,然后添加您想要稍后等待的任务,例如parallelOperations.Add(context.InsertAsync(pocoObj));
,最后执行if (parallelOperations.Any()) { await Task.WhenAll(parallelOperations); }
- 如果您有超过一手指数量的任务需要等待,这将特别有意义。 - Matt