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

См. также