Red de conocimiento de abogados - Derecho de sociedades - Excepción de rutina, cancelación, manejo de fallas

Excepción de rutina, cancelación, manejo de fallas

CoroutineExceptionHandler es una subclase de CoroutineContext. Puede usar "+" para conectarse y pasar CoroutineScope o iniciar la función (solo se puede colocar en corrutinas de nivel superior)

Al crear un. corrutina, devolverá un objeto Job, y Job también es una subclase de CoroutineContext. Este objeto proporciona un método de cancelación para cancelar la corrutina:

Cuando hay varias corrutinas, puede escribir así:

p>

Además, la biblioteca LifeCycler de ktx ha encapsulado la operación de cancelación de la corrutina. Solo necesita usar el alcance de esta biblioteca para iniciar la corrutina y puede cancelar la corrutina manualmente sin tener que cancelarla manualmente. /p>

El fallo de la corrutina no significa que el programa falle. En tales circunstancias, no existe el fallo. El requisito previo para el fallo de la corrutina es capturar la excepción del programa antes de que podamos hablar sobre el fallo de la corrutina. Cuando una corrutina falla, el evento de falla se propagará a la capa superior, que es la capa principal en la figura anterior. Luego, la capa principal llamará al método cancel() de todas las subcorrutinas para finalizar todas las subcorrutinas. Llame a su propio método cancel() y continúe aumentando hasta llegar a la rutina de nivel superior. Una vez que se cancela una rutina, ya no se puede realizar launch(). En este momento, debe utilizar SuperVisorJob para resolver este problema. SuperVisorJob es esencialmente un trabajo, pero tiene un comportamiento adicional: si una subcorrutina falla, SupervisorJob no realizará ningún otro procesamiento para la subcorrutina o para sí mismo. Este es el rol de SupervisorJob.

Reemplace el Trabajo de la corrutina con un SupervisorJob

De esta manera, las dos corrutinas no se afectarán entre sí. Veamos la siguiente situación:

Dos internas. La corrutina no heredará el SupervisorJob de la corrutina padre, porque hay una regla en la estructura de la corrutina: cuando el padre de una corrutina es otra corrutina, el Trabajo padre siempre será de tipo Job (cuando el padre de una corrutina es otra corrutina) Cuando se usa otra corrutina, el tipo de Trabajo principal siempre es Trabajo), por lo que su contexto sigue siendo el Trabajo más común y todos se afectarán entre sí. Solo necesita incluir una función supervisorScope en la capa externa:

Nota: SupervisorJob() está diseñado para corrutinas de nivel superior

Referencia de: /androiddevelopers/coroutines-first-things-first-e6187bf3bb21