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
- Channel::send — Envoi bloquant
- Channel::isFull — Vérifier si le tampon est plein
- Channel::isClosed — Vérifier si le canal est fermé