Pool::acquire

(PHP 8.6+, True Async 1.0)

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

Acquisisce una risorsa dal pool. Se non sono disponibili risorse libere e il limite massimo e’ stato raggiunto, la coroutine si blocca fino a quando una risorsa diventa disponibile.

Se il pool ha una risorsa libera, viene restituita immediatamente. Se non ci sono risorse libere ma il limite max non e’ stato raggiunto, viene creata una nuova risorsa tramite factory. Altrimenti, la chiamata attende il rilascio di una risorsa.

Parametri

timeout
Tempo massimo di attesa in millisecondi. 0 — attesa indefinita. Se il timeout viene superato, viene lanciata una PoolException.

Valore di ritorno

Restituisce una risorsa dal pool.

Errori

Lancia Async\PoolException se:

Esempi

Esempio #1 Utilizzo base

<?php

use Async\Pool;

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

// Ottieni una connessione (attende se necessario)
$conn = $pool->acquire();

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

Esempio #2 Con 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); // attendi al massimo 5 secondi
    // lavora con la connessione...
    $pool->release($conn);
} catch (PoolException $e) {
    echo "Failed to acquire resource: {$e->getMessage()}\n";
}

Vedi anche