【发布时间】:2020-09-08 10:10:00
【问题描述】:
我有一个自定义 Scope,它使用单个线程作为 Dispatcher。
private val jsDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher()
private val jsScope = CoroutineScope(jsDispatcher + SupervisorJob() + CoroutineName("JS-Thread"))
假设我有一个代码块,它使用上述范围来启动一个新的协程并调用多个挂起方法
jsScope.launch {
sampleMethod()
sampleMethod2()
sampleMethod3()
}
如果上面的示例方法之一没有在上面的 JS 线程上运行,我需要验证并抛出异常
private suspend fun sampleMethod() = coroutineScope {
//Implement me
validateThread()
}
如何执行?
【问题讨论】:
-
withContext(jsDispatcher)? -
@Nicolas 不,这不是我想要的,如果我切换上下文,则无需验证 :)
-
您可以使用
Thread.currentThread().name来检查当前线程名称,但是它的名称会像pool-2-thread-1这样几乎无法验证。有一种方法可以自定义名称,但首先,我是否正确理解您的问题?为什么不withContext,如果线程错了你想怎么办? -
@Nicolas 我已编辑问题以添加更多说明。一旦我使用方法 sampleMethod,我就不想切换上下文,因为我已经在上面了。但只是想验证没有其他人会来自另一个范围