Pool::release

(PHP 8.6+, True Async 1.0)

public Pool::release(mixed $resource): void

Devuelve un recurso previamente adquirido al pool. Si se estableció un hook beforeRelease al crear el pool, se invoca antes de la devolución. Si el hook devuelve false, el recurso se destruye en lugar de ser devuelto al pool.

Si hay corrutinas esperando un recurso mediante acquire(), el recurso se entrega inmediatamente a la primera corrutina en espera.

Parámetros

resource
Un recurso previamente adquirido mediante acquire() o tryAcquire().

Valor de retorno

No se devuelve ningún valor.

Ejemplos

Ejemplo #1 Devolución segura mediante finally

<?php

use Async\Pool;

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

$conn = $pool->acquire();

try {
    $conn->beginTransaction();
    $conn->exec("INSERT INTO logs (message) VALUES ('event')");
    $conn->commit();
} catch (\Throwable $e) {
    $conn->rollBack();
    throw $e;
} finally {
    $pool->release($conn);
}

Ejemplo #2 Destrucción automática mediante beforeRelease

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new TcpClient('api.example.com', 443),
    destructor: fn(TcpClient $c) => $c->disconnect(),
    beforeRelease: function(TcpClient $client): bool {
        // Si la conexión está rota — no devolver al pool
        return $client->isAlive();
    },
    max: 5
);

$client = $pool->acquire();

try {
    $client->send('PING');
} finally {
    // Si isAlive() devuelve false, el cliente será destruido
    $pool->release($client);
}

Ver también