Определение объема сопрограммы Kotlin - PullRequest
0 голосов
/ 22 февраля 2019

Представьте, что у меня есть область сопрограммы под названием CryptographyScope:

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

Итак, во многих местах в моем приложении я называю CryptographyScope.async.

CryptographyScope.async {
    cryptographyService.decrypt(value) 
} 
  • Что происходит, когда один из cryptographyService.decrypt(value) не срабатывает и выдает исключение?Отменяет ли он все сопрограммы, которые используют CryptographyScope в приложении в момент исполнения?

  • Должен ли CryptographyScope быть одиночным?

1 Ответ

0 голосов
/ 28 февраля 2019

CoroutineScope определяет область, в которой вы храните, разграничиваете и отслеживаете все параллельные операции и привязывает их к жизненному циклу вашего приложения.

Я собирался позвонить decrypt через пользовательскую область, которую я создал CryptographyScope.Но это неправильно, поскольку у меня нет ни одного объекта с определенным жизненным циклом, поэтому я не смогу избежать утечки.

Правильно сделать следующее:

fun decryptAll() = coroutineScope {
    async { 
        cryptographyService.decrypt(value1) 
    }
    async { 
        cryptographyService.decrypt(value2) 
    }
}
...