很明显,我可以在使用launch时命名协程:
launch(CoroutineName("test")) { ... }
然而,当当前作业是coroutineScope时,我正在努力摆脱显示在调试器上的匿名协程。
coroutineScope
suspend fun test = coroutineScope { ... }
向coroutineScope添加名称的最简单方法是什么?目前它被视为:job = "coroutine#1":ScopeCoroutine{Active}@5bf76be8
job = "coroutine#1":ScopeCoroutine{Active}@5bf76be8
k0pti3hp1#
我发现诀窍是用withContext Package 。我做了一个实用程序来完成这个任务:
withContext
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时不会保留父名称,因此新名称应该包含其自身所需的所有上下文信息。
CoroutineName
1条答案
按热度按时间k0pti3hp1#
我发现诀窍是用
withContext
Package 。我做了一个实用程序来完成这个任务:
作业=“名称#1”:作用域协同程序{活动}@16e7de7d
另一种选择是使类实现CoroutineScope并添加
但是,这并不能让我满意,因为它在类级别而不是函数级别添加了名称
另一件需要注意的事情是,在添加
CoroutineName
时不会保留父名称,因此新名称应该包含其自身所需的所有上下文信息。