Coroutine::finally

(PHP 8.6+, True Async 1.0)

public Coroutine::finally(\Closure $callback): void

Registra una funzione di callback che verrà chiamata al completamento della coroutine, indipendentemente dall’esito (successo, errore o annullamento).

Se la coroutine è già completata al momento della chiamata a finally(), il callback verrà eseguito immediatamente.

Possono essere registrati più handler – vengono eseguiti nell’ordine in cui sono stati aggiunti.

Parametri

callback
La funzione handler. Riceve l’oggetto coroutine come argomento.

Esempi

Esempio #1 Uso base

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(function() {
    return "risultato test";
});

$coroutine->finally(function() {
    echo "Coroutine completata\n";
});

await($coroutine);

Esempio #2 Pulizia delle risorse

<?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 "Connessione chiusa\n";
});

$result = await($coroutine);

Esempio #3 Handler multipli

<?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);
// Output:
// Handler 1
// Handler 2
// Handler 3

Esempio #4 Registrazione dopo il completamento

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(fn() => 42);
await($coroutine);

// Coroutine già completata -- il callback viene eseguito immediatamente
$coroutine->finally(function() {
    echo "Chiamato immediatamente\n";
});

Vedi anche