/* Page prose (fr) */
"ProducingWithAsyncStream" = "# Produire une séquence avec AsyncStream\n\nConsommer, c'est la moitié de l'histoire. La plupart du temps, c'est *toi* qui as des valeurs qui arrivent au compte-gouttes (d'un minuteur, d'un callback de localisation, d'un capteur Bluetooth), et tu veux les remettre à une boucle `for await`. **`AsyncStream` est l'outil qui transforme une source de valeurs une à une en une séquence asynchrone.**\n\nTu la crées avec une closure qui reçoit une **continuation**, un objet que tu appelles pour pousser des valeurs dans le stream:\n\n* `continuation.yield(value)` émet un élément à quiconque est en train de boucler.\n* `continuation.finish()` termine le stream, donc la boucle du consommateur s'arrête.\n\nCâblons la station météo du toit. Elle émet une mesure environ toutes les 0.3 seconde, cinq fois, puis se termine.";
"ProducingWithAsyncStream-2" = "**Observe l'exécution:** les deux lignes `print` s'entrelacent, une paire à la fois, environ toutes les 0.3 seconde: `sensor emits reading 1`, puis `received ...°C`, puis une pause, puis la mesure 2, et ainsi de suite. Après la cinquième mesure, `finish()` termine le stream, la boucle sort, et `Stream finished` s'affiche. Tu es littéralement en train de voir des valeurs arriver au fil du temps, ce qu'aucun simple tableau ne pourrait te montrer.\n\n* callout(Essaie): Change `1...5` en `1...8` et le délai en `.milliseconds(150)`. Le stream émet maintenant plus de mesures, plus vite. La ligne `finish()` le termine toujours proprement.\n\nQuelques points qui méritent d'être nommés:\n\n* La closure exécute sa propre `Task` pour faire l'attente. `yield` peut être appelé depuis n'importe où, un nombre illimité de fois: depuis un minuteur, une méthode delegate, un completion handler. Chaque appel livre un élément à la boucle.\n* Si personne n'a encore attendu la prochaine valeur, `AsyncStream` la **met en mémoire tampon**, donc tu ne perdras pas une mesure qui arrive pendant que le consommateur est occupé.\n* Les valeurs que tu émets avec `yield` devraient être **`Sendable`**: elles sautent de la tâche productrice à la tâche consommatrice. `Double` et `Int` le sont déjà, donc la vérification des data races de Swift 6 reste silencieuse ici.\n\n[Précédent](@previous)  |  page 3 sur 7  |  [Suivant: Nettoyer avec onTermination](@next)";
