La règle:
Entre 2 mises en attente, le systême asynchrone garantit que la coroutine/tâche ne sera jamais interrompue.
Cette garantie vient du fait les tâches/coroutine sont stockées dans une file d'attente qui est gérée par une boucle dédiée . La file d'attente est unique pour un et un seul thread. Même si le thread est interrompu, la tache reprendra son exécution.
Une tâche est toujours créée à partir d'une coroutine. Elle propose une interface beaucoup plus complète.
La Task, la coroutine sont des objets awaitables à l'instar des Futures qui sont des objets bas niveau utilisés dans les classes de synchronisation comme le Semaphore.
Une tâche peut être dans l'un de ces 4 états:
- En attente:
PENDING,
- Terminée:
FINISHED, évaluable via la mèthode done():
- avec un résultat, qui est récupérable via la méthode
result().
- avec une erreur (exception levée), qui est récupérable via la mèthode
exception().
- Annulée:
CANCELLED, évaluable via la méthode cancelled() et qui lève une exception CncelledError.