Kotlin协程范围定义

问题描述 投票:-1回答:1

想象一下,我有一个名为CryptographyScope的协程范围:

object CryptographyScope : CoroutineScope {
     override val coroutineContext: CoroutineContext =
        Dispatchers.IO + CoroutineName("CryptographyScope")
}

因此,在我的应用程序的许多地方,我打电话给CryptographyScope.async

CryptographyScope.async {
    cryptographyService.decrypt(value) 
} 
  • 当其中一个cryptographyService.decrypt(value)失败并抛出异常时会发生什么?它会在执行时取消在应用程序中使用CryptographyScope的每个协同程序吗?
  • CryptographyScope应该是单身吗?
kotlin kotlinx.coroutines kotlin-coroutines
1个回答
0
投票

CoroutineScope定义了一个范围,您可以在其中包含,分隔和跟踪所有并发操作,并将它们绑定到应用程序实体的生命周期。

我打算通过我创建decrypt的自定义范围调用CryptographyScope。但是,这是不对的,因为我没有任何具有已定义生命周期的实体,因此无法避免泄漏发生。

正确的做法是:

fun decryptAll() = coroutineScope {
    async { 
        cryptographyService.decrypt(value1) 
    }
    async { 
        cryptographyService.decrypt(value2) 
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.