Pool::release
(PHP 8.6+, True Async 1.0)
php
public Pool::release(mixed $resource): voidGibt eine zuvor erworbene Ressource an den Pool zurueck. Wenn beim Erstellen des Pools ein beforeRelease-Hook gesetzt wurde, wird dieser vor der Rueckgabe aufgerufen. Wenn der Hook false zurueckgibt, wird die Ressource zerstoert, anstatt an den Pool zurueckgegeben zu werden.
Wenn Coroutinen ueber acquire() auf eine Ressource warten, wird die Ressource sofort an die erste wartende Coroutine uebergeben.
Parameter
resource : Eine zuvor ueber acquire() oder tryAcquire() erworbene Ressource.
Rueckgabewert
Es wird kein Wert zurueckgegeben.
Beispiele
Beispiel #1 Sichere Rueckgabe ueber 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);
}Beispiel #2 Automatische Zerstoerung ueber 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 {
// Wenn die Verbindung unterbrochen ist — nicht an den Pool zurueckgeben
return $client->isAlive();
},
max: 5
);
$client = $pool->acquire();
try {
$client->send('PING');
} finally {
// Wenn isAlive() false zurueckgibt, wird der Client zerstoert
$pool->release($client);
}Siehe auch
- Pool::acquire --- Eine Ressource aus dem Pool erwerben
- Pool::tryAcquire --- Nicht-blockierender Erwerb
- Pool::close --- Den Pool schliessen