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 ? "Sent" : "Channel full"; // "Channel full"
Приклад #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 — Перевірити, чи канал закрито