Pool::release

(PHP 8.6+, True Async 1.0)

public Pool::release(mixed $resource): void

Возвращает ранее полученный ресурс обратно в пул. Если при создании пула был задан beforeRelease хук, он вызывается перед возвратом. Если хук возвращает false, ресурс уничтожается вместо возврата в пул.

Если есть корутины, ожидающие ресурс через acquire(), ресурс сразу передаётся первому ожидающему.

Параметры

resource
Ресурс, ранее полученный через acquire() или tryAcquire().

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

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

Примеры

Пример #1 Безопасный возврат через finally

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
    max: 10
);

$conn = $pool->acquire();

try {
    $conn->beginTransaction();
    $conn->exec("INSERT INTO logs (message) VALUES ('event')");
    $conn->commit();
} catch (\Throwable $e) {
    $conn->rollBack();
    throw $e;
} finally {
    $pool->release($conn);
}

Пример #2 Автоматическое уничтожение через beforeRelease

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new TcpClient('api.example.com', 443),
    destructor: fn(TcpClient $c) => $c->disconnect(),
    beforeRelease: function(TcpClient $client): bool {
        // Если соединение разорвано — не возвращать в пул
        return $client->isAlive();
    },
    max: 5
);

$client = $pool->acquire();

try {
    $client->send('PING');
} finally {
    // Если isAlive() вернёт false, клиент будет уничтожен
    $pool->release($client);
}

См. также