Coroutine::finally
(PHP 8.6+, True Async 1.0)
public Coroutine::finally(\Closure $callback): void
Enregistre une fonction de rappel qui sera appelée lorsque la coroutine se termine, quel que soit le résultat (succès, erreur ou annulation).
Si la coroutine est déjà terminée au moment de l’appel de finally(), le callback s’exécutera immédiatement.
Plusieurs gestionnaires peuvent être enregistrés – ils s’exécutent dans l’ordre dans lequel ils ont été ajoutés.
Paramètres
- callback
- La fonction gestionnaire. Reçoit l’objet coroutine comme argument.
Exemples
Exemple #1 Utilisation de base
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(function() {
return "test result";
});
$coroutine->finally(function() {
echo "Coroutine completed\n";
});
await($coroutine);
Exemple #2 Nettoyage des ressources
<?php
use function Async\spawn;
use function Async\await;
$connection = connectToDatabase();
$coroutine = spawn(function() use ($connection) {
return $connection->query('SELECT * FROM users');
});
$coroutine->finally(function() use ($connection) {
$connection->close();
echo "Connection closed\n";
});
$result = await($coroutine);
Exemple #3 Gestionnaires multiples
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => "done");
$coroutine->finally(fn() => echo "Handler 1\n");
$coroutine->finally(fn() => echo "Handler 2\n");
$coroutine->finally(fn() => echo "Handler 3\n");
await($coroutine);
// Sortie :
// Handler 1
// Handler 2
// Handler 3
Exemple #4 Enregistrement après la terminaison
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => 42);
await($coroutine);
// La coroutine est déjà terminée -- le callback s'exécute immédiatement
$coroutine->finally(function() {
echo "Called immediately\n";
});
Voir aussi
- Coroutine::isCompleted – Vérifier la terminaison
- Coroutine::getResult – Obtenir le résultat