Pool::acquire

(PHP 8.6+, True Async 1.0)

public Pool::acquire(int $timeout = 0): mixed

Acquiert une ressource du pool. Si aucune ressource libre n’est disponible et que la limite maximale a été atteinte, la coroutine se bloque jusqu’à ce qu’une ressource devienne disponible.

Si le pool dispose d’une ressource libre, elle est retournée immédiatement. S’il n’y a pas de ressources libres mais que la limite max n’a pas été atteinte, une nouvelle ressource est créée via factory. Sinon, l’appel attend qu’une ressource soit libérée.

Paramètres

timeout
Temps d’attente maximum en millisecondes. 0 — attente indéfinie. Si le timeout est dépassé, une PoolException est levée.

Valeur de retour

Retourne une ressource du pool.

Erreurs

Lève Async\PoolException si :

Exemples

Exemple #1 Utilisation basique

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
    max: 5
);

// Get a connection (waits if necessary)
$conn = $pool->acquire();

try {
    $stmt = $conn->prepare('SELECT * FROM users WHERE id = ?');
    $stmt->execute([42]);
    $user = $stmt->fetch();
} finally {
    $pool->release($conn);
}

Exemple #2 Avec 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); // wait no more than 5 seconds
    // work with connection...
    $pool->release($conn);
} catch (PoolException $e) {
    echo "Failed to acquire resource: {$e->getMessage()}\n";
}

Voir aussi