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