Channel::close

(PHP 8.6+, True Async 1.0)

public Channel::close(): void

Chiude il canale. Dopo la chiusura:

Chiamare close() di nuovo su un canale gia’ chiuso non causa errori.

Esempi

Esempio #1 Chiusura di un canale dopo l’invio dei dati

<?php

use Async\Channel;

$channel = new Channel(10);

spawn(function() use ($channel) {
    for ($i = 0; $i < 5; $i++) {
        $channel->send($i);
    }
    $channel->close(); // segnala al ricevitore che non arriveranno piu' dati
});

spawn(function() use ($channel) {
    foreach ($channel as $value) {
        echo "Ricevuto: $value\n";
    }
    // foreach termina dopo la chiusura e lo svuotamento del buffer
    echo "Canale esaurito\n";
});

Esempio #2 Gestione della chiusura da parte delle coroutine in attesa

<?php

use Async\Channel;

$channel = new Channel();

spawn(function() use ($channel) {
    try {
        $channel->send('data'); // in attesa di un ricevitore
    } catch (\Async\ChannelException $e) {
        echo "Canale chiuso: {$e->getMessage()}\n";
    }
});

spawn(function() use ($channel) {
    delay(100); // breve ritardo
    $channel->close(); // sblocca il mittente con un'eccezione
});

Vedi anche