Pool::acquire

(PHP 8.6+, True Async 1.0)

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

Adquiere un recurso del pool. Si no hay recursos libres disponibles y se ha alcanzado el límite máximo, la corrutina se bloquea hasta que un recurso esté disponible.

Si el pool tiene un recurso libre, se devuelve inmediatamente. Si no hay recursos libres pero el límite max no se ha alcanzado, se crea un nuevo recurso mediante factory. En caso contrario, la llamada espera a que se libere un recurso.

Parámetros

timeout
Tiempo máximo de espera en milisegundos. 0 — esperar indefinidamente. Si se excede el tiempo de espera, se lanza una PoolException.

Valor de retorno

Devuelve un recurso del pool.

Errores

Lanza Async\PoolException si:

Ejemplos

Ejemplo #1 Uso básico

<?php

use Async\Pool;

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

// Obtener una conexión (espera si es necesario)
$conn = $pool->acquire();

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

Ejemplo #2 Con tiempo de espera

<?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); // esperar como máximo 5 segundos
    // trabajar con la conexión...
    $pool->release($conn);
} catch (PoolException $e) {
    echo "Error al adquirir recurso: {$e->getMessage()}\n";
}

Ver también