Pool::release
(PHP 8.6+, True Async 1.0)
public Pool::release(mixed $resource): void
Retourne une ressource précédemment acquise dans le pool. Si un hook beforeRelease
a été défini lors de la création du pool, il est appelé avant le retour. Si le hook
retourne false, la ressource est détruite au lieu d’être retournée dans le pool.
Si des coroutines attendent une ressource via acquire(), la ressource est
immédiatement transmise à la première coroutine en attente.
Paramètres
- resource
- Une ressource précédemment acquise via
acquire()outryAcquire().
Valeur de retour
Aucune valeur n’est retournée.
Exemples
Exemple #1 Retour sécurisé via 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);
}
Exemple #2 Destruction automatique via 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);
}
Voir aussi
- Pool::acquire — Acquérir une ressource du pool
- Pool::tryAcquire — Acquisition non bloquante
- Pool::close — Fermer le pool