android - 如何检查协程是否使用相同的上下文?

标签 android kotlin kotlin-coroutines

我有两个协程,我想检查它们是否在相同的上下文/调度程序中运行。这是我的问题的简化版本,但答案将适用于我正在做的事情:

@Test
fun test() {
   val io = runBlocking(Dispatcher.IO) {
       coroutineContext
   }
   val nonIo = runBlocking() {
       coroutineContext
   }
   assertNotEquals(io, nonIo)
}

但是,这是一个糟糕的测试,因为我只是在比较两个不同的对象。我想比较一下他们是否使用 Dispatcher.IO

最佳答案

我想你的意思是问协程是否使用相同的 Dispatcher,对吧?调度程序只是 CoroutineContext 的一部分。您可以使用带有键 ContinuationInterceptor 的 CoroutineContext 的 get 函数来检索 Dispatcher。

val io = withContext(Dispatchers.IO) {
    coroutineContext[ContinuationInterceptor]
}
val nonIo = withContext(Dispatchers.Default) {
    coroutineContext[ContinuationInterceptor]
}
assertNotEquals(io, nonIo)

关于android - 如何检查协程是否使用相同的上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63383073/

相关文章:

random - 如何在 Kotlin 中获取随机数?

kotlin - 将确定列表扩展为 Kotlin 中的变量

java - AsyncTask API 在 Android 11 中被弃用。有哪些替代方案?

java - 有谁知道这个关于 firebase 性能监控的异常是什么?

kotlin - 如何在Ktor(Kotlin)中的管道的各个部分之间传递数据

android - 在继续之前等待几个流程完成

kotlin - 您应该将 coroutineScope 作为函数参数传递吗?

android - 删除 InteractionState 后,Jetpack Compose Beta 1 中提升按下状态

java - cipher.doFinal 额外字节

Android:MediaPlayer getCurrentPosition() 卡住了