Channel::close

(PHP 8.6+, True Async 1.0)

public Channel::close(): void

Закриває канал. Після закриття:

Повторний виклик close() на вже закритому каналі не спричиняє помилок.

Приклади

Приклад #1 Закриття каналу після відправлення даних

<?php

use Async\Channel;

$channel = new Channel(10);

spawn(function() use ($channel) {
    for ($i = 0; $i < 5; $i++) {
        $channel->send($i);
    }
    $channel->close(); // сигнал отримувачу, що більше даних не буде
});

spawn(function() use ($channel) {
    foreach ($channel as $value) {
        echo "Отримано: $value\n";
    }
    // foreach завершується після закриття та вичерпання буфера
    echo "Канал вичерпано\n";
});

Приклад #2 Обробка закриття корутинами, що очікують

<?php

use Async\Channel;

$channel = new Channel();

spawn(function() use ($channel) {
    try {
        $channel->send('data'); // очікування на отримувача
    } catch (\Async\ChannelException $e) {
        echo "Канал закрито: {$e->getMessage()}\n";
    }
});

spawn(function() use ($channel) {
    delay(100); // коротка затримка
    $channel->close(); // розблокує відправника з виключенням
});

Дивіться також