协同程序Kotlin中Job和Deferred之间的区别

麦格什·潘甸

我了解协程,是我的新手launchasync但仍然令人困惑的是Deferred什么Deferred之间的差异JobDeferred清晰的解释和示例会更有帮助。提前致谢。

尼安人

这样job的对象代表了协程的执行,并且与结构化并发相关,例如,您可以取消作业,并且该作业的所有子级也将被取消。

文档

作业是一个可以取消的事物,其生命周期以完成为最高。

DeferredFutureJava中的一种类似物:in封装了一个操作,它将在初始化之后的某个时候完成。但也与Kotlin中的协程有关。

从文档:

递延值是无障碍可取消的未来-这是有结果的工作。

所以,Deferred是一个Job具有结果:

deferred值是一个Job生成job中的A代表协程本身。coroutineContextasync

一个例子:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章