想象一下,我有一个名为CryptographyScope
的协程范围:
object CryptographyScope : CoroutineScope {
override val coroutineContext: CoroutineContext =
Dispatchers.IO + CoroutineName("CryptographyScope")
}
因此,在我的应用程序的许多地方,我打电话给CryptographyScope.async
。
CryptographyScope.async {
cryptographyService.decrypt(value)
}
cryptographyService.decrypt(value)
失败并抛出异常时会发生什么?它会在执行时取消在应用程序中使用CryptographyScope
的每个协同程序吗?CoroutineScope定义了一个范围,您可以在其中包含,分隔和跟踪所有并发操作,并将它们绑定到应用程序实体的生命周期。
我打算通过我创建decrypt
的自定义范围调用CryptographyScope
。但是,这是不对的,因为我没有任何具有已定义生命周期的实体,因此无法避免泄漏发生。
正确的做法是:
fun decryptAll() = coroutineScope {
async {
cryptographyService.decrypt(value1)
}
async {
cryptographyService.decrypt(value2)
}
}