context: CoroutineContext = EmptyCoroutineContext,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> T
): Deferred {
val newContext = newCoroutineContext(context)
val coroutine = if (start.is 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 Lazy)
LazyDeferredCoroutine(newContext, block) else
DeferredCoroutine(newContext, active = true)
coroutine.start(start, coroutine, block)
return coroutine
}
可以看出,async
与launch
一样,也会新创建一个新的协程,不同的是launch
返回的是Job
类型,而async
返回的是Deferred
类型(Deferred是Job的子类)。我们通过个小例子来看下async
如何使用,如下:
coroutineScope.launch(Dispatchers.IO) {
val a = async{ getUserInfo() }
// 执行协程
val userInf