Scope::finally
(PHP 8.6+, True Async 1.0)
public function finally(\Closure $callback): void
Регистрирует функцию обратного вызова, которая будет выполнена при завершении scope. Это аналог блока finally для scope, гарантирующий выполнение кода очистки вне зависимости от того, как scope завершился (нормально, с отменой или ошибкой).
Параметры
callback — замыкание, которое будет вызвано при завершении scope.
Возвращаемое значение
Функция не возвращает значения.
Примеры
Пример #1 Очистка ресурсов
<?php
use Async\Scope;
$scope = new Scope();
$scope->finally(function() {
echo "Scope завершён, очистка ресурсов\n";
// Закрытие соединений, удаление временных файлов
});
$scope->spawn(function() {
echo "Выполнение задачи\n";
});
$scope->awaitCompletion();
// Вывод: "Выполнение задачи"
// Вывод: "Scope завершён, очистка ресурсов"
Пример #2 Несколько колбэков
<?php
use Async\Scope;
$scope = new Scope();
$scope->finally(function() {
echo "Закрытие соединения с БД\n";
});
$scope->finally(function() {
echo "Запись метрик\n";
});
$scope->spawn(function() {
\Async\delay(1000);
});
$scope->dispose();
// Оба колбэка будут вызваны при завершении scope
См. также
- Scope::dispose — Закрыть scope
- Scope::isFinished — Проверить, завершён ли scope
- Coroutine::finally — Колбэк при завершении корутины