Channel::close

(PHP 8.6+, True Async 1.0)

public Channel::close(): void

Cierra el canal. Después de cerrar:

Llamar a close() nuevamente en un canal ya cerrado no causa errores.

Ejemplos

Ejemplo #1 Cerrar un canal después de enviar datos

<?php

use Async\Channel;

$channel = new Channel(10);

spawn(function() use ($channel) {
    for ($i = 0; $i < 5; $i++) {
        $channel->send($i);
    }
    $channel->close(); // señal al receptor de que no vendrán más datos
});

spawn(function() use ($channel) {
    foreach ($channel as $value) {
        echo "Recibido: $value\n";
    }
    // foreach termina después de cerrar y vaciar el búfer
    echo "Canal agotado\n";
});

Ejemplo #2 Manejo del cierre por corrutinas en espera

<?php

use Async\Channel;

$channel = new Channel();

spawn(function() use ($channel) {
    try {
        $channel->send('data'); // esperando un receptor
    } catch (\Async\ChannelException $e) {
        echo "Canal cerrado: {$e->getMessage()}\n";
    }
});

spawn(function() use ($channel) {
    delay(100); // breve retardo
    $channel->close(); // desbloquea al emisor con una excepción
});

Ver también