ThreadChannel::isClosed
(PHP 8.6+, True Async 1.0)
php
public ThreadChannel::isClosed(): boolRetourne true si le canal a été fermé via close().
Un canal fermé n'accepte plus de nouvelles valeurs via send(), mais recv() continue de retourner les valeurs restantes dans le tampon jusqu'à ce qu'il soit vidé.
isClosed() est thread-safe et peut être appelé depuis n'importe quel thread sans synchronisation.
Valeurs de retour
true — le canal est fermé. false — le canal est ouvert.
Exemples
Exemple #1 Vérifier l'état du canal depuis le thread principal
php
<?php
use Async\ThreadChannel;
use function Async\spawn;
use function Async\spawn_thread;
use function Async\await;
spawn(function() {
$channel = new ThreadChannel(5);
echo $channel->isClosed() ? "closed" : "open"; // "open"
$channel->send('data');
$channel->close();
echo $channel->isClosed() ? "closed" : "open"; // "closed"
// Les valeurs mises en tampon avant la fermeture sont toujours lisibles
echo $channel->recv(), "\n"; // "data"
});Exemple #2 Boucle de consommation protégée par isClosed()
php
<?php
use Async\ThreadChannel;
use function Async\spawn;
use function Async\spawn_thread;
use function Async\await;
spawn(function() {
$channel = new ThreadChannel(20);
$producer = spawn_thread(function() use ($channel) {
for ($i = 0; $i < 10; $i++) {
$channel->send($i);
}
$channel->close();
});
$consumer = spawn_thread(function() use ($channel) {
// Continuer la lecture jusqu'à fermeture ET tampon vide
while (!$channel->isClosed() || !$channel->isEmpty()) {
try {
echo $channel->recv(), "\n";
} catch (\Async\ThreadChannelException) {
break;
}
}
});
await($producer);
await($consumer);
});Voir aussi
- ThreadChannel::close — Fermer le canal
- ThreadChannel::isEmpty — Vérifier si le tampon est vide
- Vue d'ensemble du composant ThreadChannel