Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
При возникновении исключения внутри корутины зависимость от типа исключения (и настроек диспетчера/контекста) определяет, как оно будет обработано.
Нерегулируемое исключение: Если исключение не перехвачено внутри корутины, оно propagate вверх по иерархии корутин до ближайшего родительского Job
(или CoroutineScope
). Поведение зависит от типа Job
:
Job
: По умолчанию, при возникновении исключения в дочерней корутине, родительский Job
отменяется, что приводит к отмене всех его остальных дочерних корутин. Исключение перебрасывается выше.SupervisorJob
: Родительский SupervisorJob
не отменяется при возникновении исключения в дочерней корутине. Только сама корутина, в которой произошло исключение, отменяется. Это полезно, когда нужно, чтобы отмена одной дочерней задачи не влияла на другие.CoroutineScope
: Если исключение достигает корневого CoroutineScope
(например, GlobalScope
или scope, созданный с помощью CoroutineScope
без Job
), оно передается в глобальный обработчик исключений CoroutineExceptionHandler
. По умолчанию, если нет зарегистрированного обработчика, исключение логируется в System.err
.Перехваченное исключение: Если исключение перехвачено с помощью try-catch
блока внутри корутины, оно обрабатывается локально, и корутина продолжает выполнение после блока catch
, если это возможно. Исключение не
При возникновении исключения внутри корутины зависимость от типа исключения (и настроек диспетчера/контекста) определяет, как оно будет обработано.
Нерегулируемое исключение: Если исключение не перехвачено внутри корутины, оно propagate вверх по иерархии корутин до ближайшего родительского Job
(или CoroutineScope
). Поведение зависит от типа Job
:
Job
: По умолчанию, при возникновении исключения в дочерней корутине, родительский Job
отменяется, что приводит к отмене всех его остальных дочерних корутин. Исключение перебрасывается выше.SupervisorJob
: Родительский SupervisorJob
не отменяется при возникновении исключения в дочерней корутине. Только сама корутина, в которой произошло исключение, отменяется. Это полезно, когда нужно, чтобы отмена одной дочерней задачи не влияла на другие.CoroutineScope
: Если исключение достигает корневого CoroutineScope
(например, GlobalScope
или scope, созданный с помощью CoroutineScope
без Job
), оно передается в глобальный обработчик исключений CoroutineExceptionHandler
. По умолчанию, если нет зарегистрированного обработчика, исключение логируется в System.err
.Перехваченное исключение: Если исключение перехвачено с помощью try-catch
блока внутри корутины, оно обрабатывается локально, и корутина продолжает выполнение после блока catch
, если это возможно. Исключение не
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.