ThreadChannel::isEmpty
(PHP 8.6+, True Async 1.0)
php
public ThreadChannel::isEmpty(): boolRetourne true si le tampon du canal ne contient aucune valeur.
Pour un canal non bufferisé (capacity = 0), cette méthode retourne toujours true car les données sont transférées directement entre threads sans mise en tampon.
isEmpty() est thread-safe. Le résultat reflète l'état au moment de l'appel ; un autre thread peut placer une valeur dans le canal immédiatement après.
Valeurs de retour
true — le tampon est vide (aucune valeur disponible). false — le tampon contient au moins une valeur.
Exemples
Exemple #1 Vérifier la présence de données avant de recevoir
php
<?php
use Async\ThreadChannel;
$channel = new ThreadChannel(5);
echo $channel->isEmpty() ? "empty" : "has data"; // "empty"
$channel->send(42);
echo $channel->isEmpty() ? "empty" : "has data"; // "has data"
$channel->recv();
echo $channel->isEmpty() ? "empty" : "has data"; // "empty"Exemple #2 Consommateur qui vide un canal fermé
php
<?php
use Async\ThreadChannel;
use function Async\spawn;
use function Async\spawn_thread;
use function Async\await;
spawn(function() {
$channel = new ThreadChannel(50);
$producer = spawn_thread(function() use ($channel) {
for ($i = 0; $i < 20; $i++) {
$channel->send($i);
}
$channel->close();
});
$consumer = spawn_thread(function() use ($channel) {
// Attendre qu'il y ait quelque chose à lire, ou que le canal se ferme
while (!$channel->isClosed() || !$channel->isEmpty()) {
if ($channel->isEmpty()) {
// Tampon momentanément vide — céder et réessayer
continue;
}
try {
echo $channel->recv(), "\n";
} catch (\Async\ThreadChannelException) {
break;
}
}
});
await($producer);
await($consumer);
});Voir aussi
- ThreadChannel::isFull — Vérifier si le tampon est plein
- ThreadChannel::count — Nombre de valeurs dans le tampon
- ThreadChannel::recv — Recevoir une valeur
- Vue d'ensemble du composant ThreadChannel