Channel::sendAsync

(PHP 8.6+, True Async 1.0)

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

Fü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

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

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