CoroutineScope с SupervisorJob против SupervisorScopeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 CoroutineScope с SupervisorJob против SupervisorScope

Сообщение Anonymous »

Недавно я подробно изучал сопрограммы, насколько я понимаю, SupervisorJob() дает нам возможность не отменять все дочерние программы, если один из дочерних элементов сопрограммы отменен по какой-либо причине.Говорят, что сопрограммы, запущенные с помощью coroutineScope, отменяют всех дочерних программ в случае сбоя одного из них, но те, которые запущены с SupervisorScope, отменяют только дочерний элемент, в котором произошел сбой
Интересно, могу ли я изменить поведение CoroutineScope, добавив к нему SupervisorJob в качестве CoroutineContext, но я не смог получить ожидаемое поведение, чего я не получаю
Ожидаемое поведение — результаты getData1() и getData3() печатаются*
Фактическое: — getData2 () отменяет все сопрограммы
fun main() = runBlocking {

val exceptionHandler = CoroutineExceptionHandler { coroutineContext, throwable ->
println(throwable)
}

val customScope = CoroutineScope(SupervisorJob() + exceptionHandler)

customScope.launch {
launch {
getData1().also { println(it) }
}
launch {
getData2().also { println(it) }
}
launch {
getData3().also { println(it) }
}
}.join()

}

private suspend fun getData1(): String? {
delay(1000)
return "data 1"
}

private suspend fun getData2(): String? {
delay(300)
throw RuntimeException("While getting Data 2 exception happened")
}

private suspend fun getData3(): String? {
delay(800)
return "data 3"
}


Подробнее здесь: https://stackoverflow.com/questions/749 ... visorscope
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»