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 eine PoolException geworfen.

Rueckgabewert

Gibt eine Ressource aus dem Pool zurueck.

Fehler

Wirft Async\PoolException wenn:

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