Coroutine::finally
(PHP 8.6+, True Async 1.0)
public Coroutine::finally(\Closure $callback): void
Registra una función de callback que será llamada cuando la coroutine complete, independientemente del resultado (éxito, error o cancelación).
Si la coroutine ya ha completado en el momento en que se llama a finally(), el callback se ejecutará inmediatamente.
Se pueden registrar múltiples manejadores – se ejecutan en el orden en que fueron añadidos.
Parámetros
- callback
- La función manejadora. Recibe el objeto coroutine como argumento.
Ejemplos
Ejemplo #1 Uso básico
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(function() {
return "test result";
});
$coroutine->finally(function() {
echo "Coroutine completed\n";
});
await($coroutine);
Ejemplo #2 Limpieza de recursos
<?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);
Ejemplo #3 Múltiples manejadores
<?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
Ejemplo #4 Registro después de la finalización
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => 42);
await($coroutine);
// La coroutine ya completó -- el callback se ejecuta inmediatamente
$coroutine->finally(function() {
echo "Called immediately\n";
});
Ver también
- Coroutine::isCompleted – Verificar finalización
- Coroutine::getResult – Obtener el resultado