Channel::sendAsync
(PHP 8.6+, True Async 1.0)
php
public Channel::sendAsync(mixed $value): boolВыполняет неблокирующую попытку отправить значение в канал. В отличие от send(), этот метод никогда не приостанавливает корутину.
Возвращает true, если значение было успешно отправлено (помещено в буфер или передано ожидающему получателю). Возвращает false, если буфер полон или канал закрыт.
Параметры
value : Значение для отправки. Может быть любого типа.
Возвращаемые значения
true — значение успешно отправлено. false — канал полон или закрыт, значение не отправлено.
Примеры
Пример #1 Попытка неблокирующей отправки
php
<?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
<?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 — Проверить, закрыт ли канал