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);
}
См. также
- Pool::acquire — Получить ресурс из пула
- Pool::tryAcquire — Неблокирующее получение
- Pool::close — Закрыть пул