gpt4 book ai didi

kotlin - “job + UI”上下文和使用 “parent = job”有什么区别?

转载 作者:行者123 更新时间:2023-12-02 12:48:11 27 4
gpt4 key购买 nike

UI协同程序指南包含有关如何管理UI协同程序生命周期的section。它说明了我们应该创建一个顶级Job实例,并将复合协程上下文contextJob + UI传递给我们启动的所有协程:

launch(contextJob + UI, block = block)

在我的项目中实施此模式时,我自然会使用 contextJob作为父代:
launch(UI, parent = contextJob, block = block)

我还没有测试行为上的差异,但是我对这两个选项之间的语义差异很感兴趣。它们看起来与我非常相似,但是我更喜欢使用 parent = contextJob,因为它的作用更加明显。具体来说,我注意到 parent允许为 null,但是如果我使用 +,则可能不得不将 NonCancellable用作空对象。

使用 contextJob作为 parentlaunchactor参数有什么问题吗?

最佳答案

没有语义上的差异,将来也不会。

使用+运算符的能力自然来自coroutineContext机制:Job是上下文元素,因此可以附加到上下文中。

但是编写launch(UI + job)似乎是不自然的,因为意图并不明确。将UI调度程序和某些工作串联起来意味着什么?
为了使这种模式更具可读性,添加了parent参数,launch(UI, parent = job)是一种更自然的方式来公开打算将作业启动为给定父级的 child 的意图。
在后台,它仍然可以连接上下文和父级,但是现在API对于用户来说看起来更漂亮。

请注意,相同的方法可以用于其他库的元素,例如对于CoroutineExceptionHandler,但这是一个折衷:要么您有一个带有十几个默认参数的方法,要么牺牲了可读性并编写了launch(ctx + myExceptionHandler),所以决定只介绍parent参数作为最常见的参数。

关于kotlin - “job + UI”上下文和使用 “parent = job”有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com