/* Page prose (fr) */
"ClassicModelTaxes" = "# Le modèle classique, et les taxes qu'il facture\n\nTout dans le modèle classique partageait une même forme : tu démarrais un travail, tu lui remettais une **closure** (un completion handler) à exécuter *plus tard*, et tu passais à autre chose. Cette closure est la couture où le modèle classique te facture en silence. Cinq frais reviennent encore et encore :\n\n* **Des completion handlers partout.**  \nChaque étape asynchrone se termine en appelant *ta* closure. Rien ne s'exécute après un appel asynchrone comme le ferait une ligne normale ; tout doit vivre *dans* le handler.\n* **La pyramide de la mort.**  \nQuand l'étape B a besoin du résultat de l'étape A, l'appel de B va dans le handler de A. Ajoute l'étape C et tu imbriques encore. Le code marche vers la droite.\n* **Des erreurs qui ne peuvent pas utiliser `throws`.**  \nUn completion handler n'est pas une fonction dont tu fais `return`, donc tu ne peux pas faire `throw`. Les erreurs voyagent sous forme de valeurs que tu dois router manuellement vers chaque appelant.\n* **Oublier de rappeler.**  \nSur *certains* chemins (un `return` anticipé, une branche d'erreur) il est facile d'oublier d'appeler la complétion. L'appelant attend alors pour toujours, sans aucun crash pour pointer l'erreur.\n* **Oublier le saut vers le thread principal.**  \nLes résultats arrivent sur une file d'arrière-plan. Touche à l'UI depuis là et tu as un bug qui ne se montre que *parfois*. Tu dois te souvenir de sauter à la main vers le thread principal.\n\nTu as rencontré le dernier morceau de comptabilité manuelle dans le chapitre [Dépendances et annulation des Operations](Operation%20Dependencies%20and%20Cancellation.playgroundchapter/Overview) : câbler les dépendances entre operations, faire passer un drapeau d'annulation à travers chacune, le vérifier aux bons moments. Puissant, mais entièrement à ta charge. Regardons ces taxes s'accumuler dans un petit travail.\n\n[Précédent](@previous)  |  page 2 sur 6  |  [Suivant: Un travail en trois étapes](@next)";
