TaskGroup::awaitCompletion
(PHP 8.6+, True Async 1.0)
public TaskGroup::awaitCompletion(): void
Очікує повного завершення всіх задач у групі.
На відміну від all(), не повертає результати і не генерує винятки при помилках задач.
Група повинна бути запечатана перед викликом цього методу.
Типовий випадок використання — очікування фактичного завершення корутин після cancel().
Метод cancel() ініціює скасування, але корутини можуть завершитися асинхронно.
awaitCompletion() гарантує, що всі корутини зупинені.
Помилки
Кидає Async\AsyncException, якщо група не запечатана.
Приклади
Приклад #1 Очікування після скасування
<?php
use Async\TaskGroup;
use function Async\suspend;
spawn(function() {
$group = new TaskGroup();
$group->spawn(function() {
suspend();
return "result";
});
$group->cancel();
$group->awaitCompletion();
echo "всі корутини завершені\n";
var_dump($group->isFinished()); // bool(true)
});
Приклад #2 Отримання результатів після очікування
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fail"));
$group->seal();
$group->awaitCompletion();
// Без винятків — перевіряємо вручну
$results = $group->getResults();
$errors = $group->getErrors();
echo "Успішних: " . count($results) . "\n"; // 1
echo "Помилок: " . count($errors) . "\n"; // 1
});
Дивіться також
- TaskGroup::all — Дочекатися всіх задач та отримати результати
- TaskGroup::cancel — Скасувати всі задачі
- TaskGroup::seal — Запечатати групу