Pool::release

(PHP 8.6+, True Async 1.0)

php
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
<?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
<?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