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();
});
См. также
- Channel::send — Блокирующая отправка
- Channel::isFull — Проверить, полон ли буфер
- Channel::isClosed — Проверить, закрыт ли канал