Middle
20
0
questionbank

Что произойдет с корутиной, когда возникает исключение?

Answer from sobes.tech neural network

При возникновении исключения внутри корутины зависимость от типа исключения (и настроек диспетчера/контекста) определяет, как оно будет обработано.

  • Нерегулируемое исключение: Если исключение не перехвачено внутри корутины, оно 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, если это возможно. Исключение не

Register or sign in to get access to full answers for all questions from the question bank.

coroutineexceptionerror-handlingasynchronous-programming