TaskGroup::finally
(PHP 8.6+, True Async 1.0)
public TaskGroup::finally(Closure $callback): void
Регистрирует callback, который вызывается когда группа запечатана и все задачи завершены. Callback получает TaskGroup в качестве параметра.
Поскольку cancel() неявно вызывает seal(), обработчик срабатывает и при отмене.
Если группа уже завершена — callback вызывается синхронно сразу.
Параметры
- callback
- Closure, принимающий
TaskGroupкак единственный аргумент.
Примеры
Пример #1 Логирование завершения
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->finally(function(TaskGroup $g) {
echo "Завершено: " . $g->count() . " задач\n";
});
$group->spawn(fn() => "a");
$group->spawn(fn() => "b");
$group->seal();
$group->all();
});
// Вывод:
// Завершено: 2 задач
Пример #2 Вызов на уже завершённой группе
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => 1);
$group->seal();
$group->all();
// Группа уже завершена — callback вызывается синхронно
$group->finally(function(TaskGroup $g) {
echo "вызван сразу\n";
});
echo "после finally\n";
});
// Вывод:
// вызван сразу
// после finally
См. также
- TaskGroup::seal — Запечатать группу
- TaskGroup::cancel — Отменить задачи