Channel::sendAsync
(PHP 8.6+, True Async 1.0)
php
public Channel::sendAsync(mixed $value): boolFührt einen nicht-blockierenden Versuch durch, einen Wert an den Channel zu senden. Im Gegensatz zu send() suspendiert diese Methode die Coroutine nie.
Gibt true zurück, wenn der Wert erfolgreich gesendet wurde (im Puffer abgelegt oder an einen wartenden Empfänger übergeben). Gibt false zurück, wenn der Puffer voll oder der Channel geschlossen ist.
Parameter
value : Der zu sendende Wert. Kann von beliebigem Typ sein.
Rückgabewerte
true — der Wert wurde erfolgreich gesendet. false — der Channel ist voll oder geschlossen, der Wert wurde nicht gesendet.
Beispiele
Beispiel #1 Versuch eines nicht-blockierenden Sendens
php
<?php
use Async\Channel;
$channel = new Channel(2);
$channel->sendAsync('a'); // true — Puffer ist leer
$channel->sendAsync('b'); // true — Platz verfügbar
$result = $channel->sendAsync('c'); // false — Puffer ist voll
echo $result ? "Gesendet" : "Channel voll"; // "Channel voll"Beispiel #2 Senden mit Verfügbarkeitsprüfung
php
<?php
use Async\Channel;
$channel = new Channel(10);
spawn(function() use ($channel) {
$data = generateBatch();
foreach ($data as $item) {
if (!$channel->sendAsync($item)) {
// Puffer ist voll — auf blockierendes Senden zurückfallen
$channel->send($item);
}
}
$channel->close();
});Siehe auch
- Channel::send — Blockierendes Senden
- Channel::isFull — Prüfen, ob der Puffer voll ist
- Channel::isClosed — Prüfen, ob der Channel geschlossen ist