Kotlin协程多个async调用中如何实现b执行完成后再启动c?
Kotlin协程异步任务依赖执行实现方案
要实现c任务等待b任务执行完成后再启动,其余任务保持并行的需求,只需调整async的启动时机即可,正确实现代码如下:
coroutineScope { val aFetcher = async { a.fetch() } val bFetcher = async { b.fetch() } val dFetcher = async { d.fetch() } // 等待b任务执行完成后再启动c任务 val bResult = bFetcher.await() val cFetcher = async { c.fetch() } Merged( aFetcher.await(), bResult, cFetcher.await(), dFetcher.await() ) }
逻辑说明
- 初始阶段同时启动a、b、d三个异步任务,三者保持并行执行,不会互相阻塞
- 调用
bFetcher.await()后,当前协程会挂起直到b任务执行完成,之后才会初始化cFetcher启动c任务,严格满足依赖要求 - 最终等待所有任务结果返回后构造
Merged对象,d任务全程和a、b并行执行,不会被c的启动逻辑拖累执行效率
注意事项
不要提前初始化所有async任务,若cFetcher和其他三个任务同时定义,不管后续何时调用await,c任务都会在定义时立刻启动,无法实现等待b的需求。
内容的提问来源于stack exchange,提问作者Matias Barrios
相关产品推荐
相关产品推荐

