TaskGroup::awaitCompletion
(PHP 8.6+, True Async 1.0)
public TaskGroup::awaitCompletion(): void
Espera hasta que todas las tareas del grupo se hayan completado completamente.
A diferencia de all(), no devuelve resultados ni lanza excepciones por errores de tareas.
El grupo debe estar sellado antes de llamar a este método.
Un caso de uso típico es esperar a que las corrutinas terminen realmente después de cancel().
El método cancel() inicia la cancelación, pero las corrutinas pueden finalizar de forma asíncrona.
awaitCompletion() garantiza que todas las corrutinas se han detenido.
Errores
Lanza Async\AsyncException si el grupo no está sellado.
Ejemplos
Ejemplo #1 Espera después de cancel
<?php
use Async\TaskGroup;
use function Async\suspend;
spawn(function() {
$group = new TaskGroup();
$group->spawn(function() {
suspend();
return "resultado";
});
$group->cancel();
$group->awaitCompletion();
echo "todas las corrutinas finalizaron\n";
var_dump($group->isFinished()); // bool(true)
});
Ejemplo #2 Obtener resultados después de esperar
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fallo"));
$group->seal();
$group->awaitCompletion();
// Sin excepciones — verificar manualmente
$results = $group->getResults();
$errors = $group->getErrors();
echo "Exitosas: " . count($results) . "\n"; // 1
echo "Errores: " . count($errors) . "\n"; // 1
});
Ver también
- TaskGroup::all — Esperar todas las tareas y obtener resultados
- TaskGroup::cancel — Cancelar todas las tareas
- TaskGroup::seal — Sellar el grupo