Channel::sendAsync

(PHP 8.6+, True Async 1.0)

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

Effectue une tentative d’envoi non bloquante d’une valeur dans le canal. Contrairement à send(), cette méthode ne suspend jamais la coroutine.

Retourne true si la valeur a été envoyée avec succès (placée dans le tampon ou transmise à un récepteur en attente). Retourne false si le tampon est plein ou si le canal est fermé.

Paramètres

value
La valeur à envoyer. Peut être de n’importe quel type.

Valeurs de retour

true — la valeur a été envoyée avec succès. false — le canal est plein ou fermé, la valeur n’a pas été envoyée.

Exemples

Exemple #1 Tentative d’envoi non bloquant

<?php

use Async\Channel;

$channel = new Channel(2);

$channel->sendAsync('a'); // true — le tampon est vide
$channel->sendAsync('b'); // true — place disponible
$result = $channel->sendAsync('c'); // false — le tampon est plein

echo $result ? "Envoyé" : "Canal plein"; // "Canal plein"

Exemple #2 Envoi avec vérification de disponibilité

<?php

use Async\Channel;

$channel = new Channel(10);

spawn(function() use ($channel) {
    $data = generateBatch();

    foreach ($data as $item) {
        if (!$channel->sendAsync($item)) {
            // Le tampon est plein — basculer vers un envoi bloquant
            $channel->send($item);
        }
    }

    $channel->close();
});

Voir aussi