TaskGroup::awaitCompletion
(PHP 8.6+, True Async 1.0)
public TaskGroup::awaitCompletion(): void
Waits until all tasks in the group have fully completed.
Unlike all(), it does not return results and does not throw exceptions on task errors.
The group must be sealed before calling this method.
A typical use case is waiting for coroutines to actually finish after cancel().
The cancel() method initiates cancellation, but coroutines may finish asynchronously.
awaitCompletion() guarantees that all coroutines have stopped.
Errors
Throws Async\AsyncException if the group is not sealed.
Examples
Example #1 Waiting after cancel
<?php
use Async\TaskGroup;
use function Async\suspend;
spawn(function() {
$group = new TaskGroup();
$group->spawn(function() {
suspend();
return "result";
});
$group->cancel();
$group->awaitCompletion();
echo "all coroutines finished\n";
var_dump($group->isFinished()); // bool(true)
});
Example #2 Getting results after waiting
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fail"));
$group->seal();
$group->awaitCompletion();
// No exceptions — check manually
$results = $group->getResults();
$errors = $group->getErrors();
echo "Successful: " . count($results) . "\n"; // 1
echo "Errors: " . count($errors) . "\n"; // 1
});
See Also
- TaskGroup::all — Wait for all tasks and get results
- TaskGroup::cancel — Cancel all tasks
- TaskGroup::seal — Seal the group