Pool::acquire
(PHP 8.6+, True Async 1.0)
public Pool::acquire(int $timeout = 0): mixed
Erwirbt eine Ressource aus dem Pool. Wenn keine freien Ressourcen verfuegbar sind und das maximale Limit erreicht ist, blockiert die Coroutine, bis eine Ressource verfuegbar wird.
Wenn der Pool eine freie Ressource hat, wird sie sofort zurueckgegeben. Wenn es keine freien Ressourcen
gibt, aber das max-Limit noch nicht erreicht ist, wird eine neue Ressource ueber factory erstellt. Andernfalls
wartet der Aufruf auf die Freigabe einer Ressource.
Parameter
- timeout
- Maximale Wartezeit in Millisekunden.
0— unbegrenzt warten. Wenn das Timeout ueberschritten wird, wird einePoolExceptiongeworfen.
Rueckgabewert
Gibt eine Ressource aus dem Pool zurueck.
Fehler
Wirft Async\PoolException wenn:
- Das Warte-Timeout ueberschritten wird.
- Der Pool geschlossen ist.
Beispiele
Beispiel #1 Grundlegende Verwendung
<?php
use Async\Pool;
$pool = new Pool(
factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
max: 5
);
// Verbindung holen (wartet bei Bedarf)
$conn = $pool->acquire();
try {
$stmt = $conn->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([42]);
$user = $stmt->fetch();
} finally {
$pool->release($conn);
}
Beispiel #2 Mit Timeout
<?php
use Async\Pool;
use Async\PoolException;
$pool = new Pool(
factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
max: 2
);
try {
$conn = $pool->acquire(timeout: 5000); // maximal 5 Sekunden warten
// mit der Verbindung arbeiten...
$pool->release($conn);
} catch (PoolException $e) {
echo "Ressource konnte nicht erworben werden: {$e->getMessage()}\n";
}
Siehe auch
- Pool::tryAcquire — Nicht-blockierender Ressourcenerwerb
- Pool::release — Eine Ressource an den Pool zurueckgeben
- Pool::__construct — Einen Pool erstellen