Pool::tryAcquire

(PHP 8.6+, True Async 1.0)

public Pool::tryAcquire(): mixed

Tenta di acquisire una risorsa dal pool senza bloccare. Se una risorsa libera e’ disponibile o il limite max non e’ stato raggiunto, restituisce la risorsa immediatamente. Altrimenti, restituisce null.

Parametri

Questo metodo non accetta parametri.

Valore di ritorno

Restituisce una risorsa dal pool oppure null se non sono disponibili risorse libere e il limite massimo e’ stato raggiunto.

Esempi

Esempio #1 Tentativo di acquisizione di una risorsa

<?php

use Async\Pool;

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

$conn = $pool->tryAcquire();

if ($conn === null) {
    echo "All connections are busy, try again later\n";
} else {
    try {
        $result = $conn->query('SELECT COUNT(*) FROM orders');
        echo "Orders: " . $result->fetchColumn() . "\n";
    } finally {
        $pool->release($conn);
    }
}

Esempio #2 Fallback quando il pool non e’ disponibile

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new CacheClient('127.0.0.1', 11211),
    max: 3
);

function getData(Pool $pool, string $key): mixed
{
    $client = $pool->tryAcquire();

    if ($client === null) {
        // Cache non disponibile — interroga direttamente il database
        return fetchFromDatabase($key);
    }

    try {
        return $client->get($key) ?? fetchFromDatabase($key);
    } finally {
        $pool->release($client);
    }
}

Vedi anche