我刚刚开始玩异步和等待.我有8个单独的数据库调用,有些依赖于其他调用.我希望能够启动3个异步方法,然后当某个1返回时,启动3个其他方法,然后当某个1返回时,再启动2个.我目前正在使用3个Parallel.Invoke方法来完成此任务,但每个并行必须等到ALL方法返回.我只关心1个方法返回,其他方法可以在后台运行,直到等待Task.WhenAll(t1,t2,t3,…,t6)结束.有没有办法用async / await来解决这个问题?
我知道await不会阻塞,但它会停止执行我的main方法(带有8个db调用),直到从方法返回值(就像同步方法一样).
解决方法:
您可以使用Task.WhenAny等待以下任何一项任务:
var completedTask = await Task.WhenAny(t1, t2, t3, ...);
如果你有一个更复杂的依赖结构,那么我建议用异步方法表示:
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, ...);
标签:c,asynchronous,async-await 来源: https://codeday.me/bug/20190520/1141506.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。