Pool::close

(PHP 8.6+, True Async 1.0)

public Pool::close(): void

Закрывает пул ресурсов. Все свободные ресурсы уничтожаются через destructor (если он задан). Все корутины, ожидающие ресурс через acquire(), получают PoolException. После закрытия любые вызовы acquire() и tryAcquire() выбрасывают исключение.

Параметры

Метод не принимает параметров.

Возвращаемые значения

Функция не возвращает значения.

Примеры

Пример #1 Корректное завершение работы

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
    destructor: function(PDO $pdo): void {
        // Закрыть все подготовленные запросы и соединение
    },
    min: 2,
    max: 10
);

// ... работа с пулом ...

// Закрываем пул при завершении приложения
$pool->close();

Пример #2 Ожидающие корутины получают исключение

<?php

use Async\Pool;
use Async\PoolException;

$pool = new Pool(
    factory: fn() => new \stdClass(),
    max: 1
);

$resource = $pool->acquire(); // забрали единственный ресурс

spawn(function() use ($pool) {
    try {
        $pool->acquire(); // ждёт освобождения
    } catch (PoolException $e) {
        echo "Пул закрыт: {$e->getMessage()}\n";
    }
});

$pool->close(); // ожидающая корутина получит PoolException

См. также