【问题标题】:What happen exactly Dispatcher.IO + job when define CoroutineScope?定义 CoroutineScope 时,Dispatcher.IO + 作业到底发生了什么?
【发布时间】:2019-12-11 13:12:52
【问题描述】:

我在我的项目中使用Coroutine 并将一个类定义为CoroutineScope 用于处理Coroutines 的差异Dispatchers,例如IOMAIN ... 但我不明白这段代码是如何工作的以及是什么机制呢?

val job = Job()

override val coroutineContext: CoroutineContext
     get() = Dispatchers.IO + job

Dispatchers.IO + job 是什么意思?

【问题讨论】:

  • 这是一个CoroutineContext,由两个元素组成:调度程序和作业。 CoroutineContext 类型本身也是 ContextElement,您可以将 ContextElements 与 + 结合使用。

标签: kotlin coroutine kotlin-coroutines


【解决方案1】:

将指定作业与 Dispatchers.IO 一起使用的优势在于,您可以随时取消该作业,而不会影响在 IO Dispatcher 中启动的其他作业。 您只需拨打job.cancel()

例如,您发出网络请求,当它以某种方式运行时您发现网络已关闭(例如,如果在 android 中来自 BroadCastReciever),那么您可以取消该网络作业。 但请记住,如果工作被取消或完成,您总是必须重新创建工作

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多