Coroutine::finally

(PHP 8.6+, True Async 1.0)

php
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
<?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
<?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
<?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
<?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