Channel::sendAsync

(PHP 8.6+, True Async 1.0)

public Channel::sendAsync(mixed $value): bool

Выполняет неблокирующую попытку отправить значение в канал. В отличие от send(), этот метод никогда не приостанавливает корутину.

Возвращает true, если значение было успешно отправлено (помещено в буфер или передано ожидающему получателю). Возвращает false, если буфер полон или канал закрыт.

Параметры

value
Значение для отправки. Может быть любого типа.

Возвращаемые значения

true — значение успешно отправлено. false — канал полон или закрыт, значение не отправлено.

Примеры

Пример #1 Попытка неблокирующей отправки

<?php

use Async\Channel;

$channel = new Channel(2);

$channel->sendAsync('a'); // true — буфер пуст
$channel->sendAsync('b'); // true — место есть
$result = $channel->sendAsync('c'); // false — буфер полон

echo $result ? "Отправлено" : "Канал полон"; // "Канал полон"

Пример #2 Отправка с проверкой доступности

<?php

use Async\Channel;

$channel = new Channel(10);

spawn(function() use ($channel) {
    $data = generateBatch();

    foreach ($data as $item) {
        if (!$channel->sendAsync($item)) {
            // Буфер полон — переключимся на блокирующую отправку
            $channel->send($item);
        }
    }

    $channel->close();
});

См. также