Coroutine::finally
(PHP 8.6+, True Async 1.0)
public Coroutine::finally(\Closure $callback): void
Registriert eine Callback-Funktion, die beim Abschluss der Coroutine aufgerufen wird, unabhaengig vom Ergebnis (Erfolg, Fehler oder Abbruch).
Wenn die Coroutine zum Zeitpunkt des finally()-Aufrufs bereits abgeschlossen ist, wird der Callback sofort ausgefuehrt.
Es koennen mehrere Handler registriert werden – sie werden in der Reihenfolge ausgefuehrt, in der sie hinzugefuegt wurden.
Parameter
- callback
- Die Handler-Funktion. Erhaelt das Coroutine-Objekt als Argument.
Beispiele
Beispiel #1 Grundlegende Verwendung
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(function() {
return "test result";
});
$coroutine->finally(function() {
echo "Coroutine abgeschlossen\n";
});
await($coroutine);
Beispiel #2 Ressourcenbereinigung
<?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 "Verbindung geschlossen\n";
});
$result = await($coroutine);
Beispiel #3 Mehrere Handler
<?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);
// Ausgabe:
// Handler 1
// Handler 2
// Handler 3
Beispiel #4 Registrierung nach Abschluss
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => 42);
await($coroutine);
// Coroutine bereits abgeschlossen -- Callback wird sofort ausgefuehrt
$coroutine->finally(function() {
echo "Sofort aufgerufen\n";
});
Siehe auch
- Coroutine::isCompleted – Abschluss pruefen
- Coroutine::getResult – Das Ergebnis abrufen