Pool::release
(PHP 8.6+, True Async 1.0)
public Pool::release(mixed $resource): void
Restituisce una risorsa precedentemente acquisita al pool. Se un hook beforeRelease
e’ stato impostato durante la creazione del pool, viene chiamato prima della restituzione. Se l’hook
restituisce false, la risorsa viene distrutta anziche’ essere restituita al pool.
Se ci sono coroutine in attesa di una risorsa tramite acquire(), la risorsa viene
immediatamente consegnata alla prima coroutine in attesa.
Parametri
- resource
- Una risorsa precedentemente acquisita tramite
acquire()otryAcquire().
Valore di ritorno
Nessun valore restituito.
Esempi
Esempio #1 Restituzione sicura tramite 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);
}
Esempio #2 Distruzione automatica tramite 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 {
// Se la connessione e' interrotta — non restituire al pool
return $client->isAlive();
},
max: 5
);
$client = $pool->acquire();
try {
$client->send('PING');
} finally {
// Se isAlive() restituisce false, il client verra' distrutto
$pool->release($client);
}
Vedi anche
- Pool::acquire — Acquisisce una risorsa dal pool
- Pool::tryAcquire — Acquisizione non bloccante
- Pool::close — Chiude il pool