协程异步并发及结构化
协程(3)
默认顺序
kotlin
1 | import kotlinx.coroutines.* |
在上述代码中,他只拉起了一个协程。在协程内,他也是按顺序一个一个运行的。
因此他最后运行任然会有两秒的延迟。
此外,即使他拉起了两个协程,他也是按照顺序或者时间片分片的方式执行(具体情况我并不清楚)。但是当他delay后,他会将现在的协程先挂起,让其他协程操作。但是同时也只能一个协程执行,也就同步操作。
async实现异步和并发
当通过async来拉起协程时,他将会是一个异步的协程,此时你要通过await()来获取值。
kotlin
1 | val one = async { doSomethingUsefulOne() } |
惰性启动 async
惰性启动即让程序员主动选择何时去拉起这个协程,通过start()和await()方法。
如果不使用start方法,那么他就是一个普通的协程。在async异步协程中,有await()的话,也会等待await()的结果先返回。
结构化并发
因为 async 函数被定义为 CoroutineScope 上的一个扩展函数,所以我们需要将它放在 CoroutineScope 中,这就是 coroutineScope 函数提供的功能:
例如:
plaintext
1 | suspend fun failedConcurrentSum(): Int = coroutineScope { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小贺同学的blog!
评论