想象一下,我有一个名为 的协程范围CryptographyScope
:
object CryptographyScope : CoroutineScope {
override val coroutineContext: CoroutineContext =
Dispatchers.IO + CoroutineName("CryptographyScope")
}
因此,在我的应用程序的许多地方,我都调用CryptographyScope.async
.
CryptographyScope.async {
cryptographyService.decrypt(value)
}
当其中一个cryptographyService.decrypt(value)
失败并抛出异常时会发生什么?它是否会CryptographyScope
在执行时取消应用程序中使用的每个协程?
CryptographyScope 应该是单例吗?
CoroutineScope 定义了一个范围,您可以在其中包含、分隔和跟踪所有并发操作,并将它们与应用程序实体的生命周期联系起来。
我打算decrypt
通过我创建的自定义范围调用CryptographyScope
。但是,这是不对的,因为我没有任何具有定义生命周期的实体,因此将无法避免发生泄漏。
正确的做法是:
fun decryptAll() = coroutineScope {
async {
cryptographyService.decrypt(value1)
}
async {
cryptographyService.decrypt(value2)
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句