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 {
// 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 — Закрити пул