Pool::release
(PHP 8.6+, True Async 1.0)
php
public Pool::release(mixed $resource): voidПовертає раніше отриманий ресурс назад до пулу. Якщо при створенні пулу був встановлений хук beforeRelease, він викликається перед поверненням. Якщо хук повертає false, ресурс знищується замість повернення до пулу.
Якщо є корутини, що очікують ресурс через acquire(), ресурс негайно передається першій очікуючій корутині.
Параметри
resource : Ресурс, раніше отриманий через acquire() або tryAcquire().
Значення, що повертається
Значення не повертається.
Приклади
Приклад #1 Безпечне повернення через finally
php
<?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
<?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 {
// If the connection is broken — do not return to the pool
return $client->isAlive();
},
max: 5
);
$client = $pool->acquire();
try {
$client->send('PING');
} finally {
// If isAlive() returns false, the client will be destroyed
$pool->release($client);
}Дивіться також
- Pool::acquire --- Отримати ресурс з пулу
- Pool::tryAcquire --- Неблокуюче отримання
- Pool::close --- Закрити пул