Недавно я подробно изучал сопрограммы, насколько я понимаю, 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
CoroutineScope с SupervisorJob против SupervisorScope ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1728831966
Anonymous
Недавно я подробно изучал сопрограммы, насколько я понимаю, SupervisorJob() дает нам возможность не отменять все дочерние программы, если один из дочерних элементов сопрограммы отменен по какой-либо причине.Говорят, что сопрограммы, запущенные с помощью coroutineScope, отменяют всех дочерних программ в случае сбоя одного из них, но те, которые запущены с SupervisorScope, отменяют только дочерний элемент, в котором произошел сбой
Интересно, могу ли я изменить поведение CoroutineScope, добавив к нему SupervisorJob в качестве CoroutineContext, но я не смог получить ожидаемое поведение, чего я не получаю
[b]Ожидаемое поведение — результаты getData1() и getData3() печатаются[/b]*
[b]Фактическое: — getData2 () отменяет все сопрограммы[/b]
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"
}
Подробнее здесь: [url]https://stackoverflow.com/questions/74985633/coroutinescope-with-supervisorjob-vs-supervisorscope[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия