jvm 如何添加名字到父'coroutineScope'协程?

xzlaal3s  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(134)

很明显,我可以在使用launch时命名协程:

launch(CoroutineName("test")) { ... }

然而,当当前作业是coroutineScope时,我正在努力摆脱显示在调试器上的匿名协程。

suspend fun test = coroutineScope { ... }

向coroutineScope添加名称的最简单方法是什么?目前它被视为:
job = "coroutine#1":ScopeCoroutine{Active}@5bf76be8

k0pti3hp

k0pti3hp1#

我发现诀窍是用withContext Package 。
我做了一个实用程序来完成这个任务:

suspend fun <R> coroutineScopeNamed(name: String? = null, block: suspend CoroutineScope.() -> R) =
    withContext(name?.let { CoroutineName(name) } ?: coroutineContext) {
        coroutineScope(block)
    }

作业=“名称#1”:作用域协同程序{活动}@16e7de7d
另一种选择是使类实现CoroutineScope并添加

override val coroutineContext: CoroutineContext = 
  context + CoroutineName("<name>")

但是,这并不能让我满意,因为它在类级别而不是函数级别添加了名称
另一件需要注意的事情是,在添加CoroutineName时不会保留父名称,因此新名称应该包含其自身所需的所有上下文信息。

相关问题