跳至主要內容

名噪一时

guodongAndroid大约 1 分钟

名噪一时

本书是关于协程的。协程是一个可以追溯到 1960 年代的概念,其描述了一种处理异步编程的独特方式。 这个概念围绕着使用挂起点、可挂起函数和续体作为语言中的一等公民。

这么说有点抽象,请看下面的示例:

fun fetchUser(userId: String) {
    val user = userService.getUser(userId) // 1
    print("Fetching user") // 2
    print(user.name) // 3
    print("Fetched user") // 4
}

使用前面你所学到的关于阻塞调用的知识看上面的代码片段,你会说代码的执行顺序可能是 1、2、3 和 4。如果你仔细查看上述代码,你会发现这并不是唯一可能的执行顺序。例如,1 和 2 之间的顺序并不重要,3 和 4 之间的顺序也不重要。重要的是在显示用户数据之前必须先获取用户数据,所以 1 必须在 3 之前执行。你还可以将用户数据的获取延迟到实际显示用户数据之前的某个时间。通过透明的方式管理这些问题是协程的黑魔法!

它们是一种部分线程、部分回调机制,并利用系统调度和挂起工作的能力。这样,你可以立即从调用中返回结果,而无需使用回调、线程或流。这样想,一旦你启动了一个协程,或者调用了一个可挂起的函数,它就会像 “卷饼” 一样被很好地包裹起来。但是,在你想吃 “卷饼” 之前,里面的代码可能不会被执行。