我了解协程,是我的新手launch
,async
但仍然令人困惑的是Deferred
。什么Deferred
啊 之间的差异Job
和Deferred
。清晰的解释和示例会更有帮助。提前致谢。
这样job
的对象代表了协程的执行,并且与结构化并发相关,例如,您可以取消作业,并且该作业的所有子级也将被取消。
从文档:
作业是一个可以取消的事物,其生命周期以完成为最高。
Deferred
是Future
Java中的一种类似物:in封装了一个操作,它将在初始化之后的某个时候完成。但也与Kotlin中的协程有关。
从文档:
递延值是无障碍可取消的未来-这是有结果的工作。
所以,Deferred
是一个Job
具有结果:
甲
deferred
值是一个Job
。生成器job
中的A代表协程本身。coroutineContext
async
一个例子:
someScope.launch {
val userJob: Deferred<User> = async(IO) { repository.getUser(id) }
//some operations, while user is being retrieved
val user = userJob.await() //here coroutine will be suspended for a while, and the method `await` is available only from `Deferred` interface
//do the job with retrieved user
}
同样,可以async
使用现有范围构造此请求,但这是另一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句