Channel::getIterator
(PHP 8.6+, True Async 1.0)
public Channel::getIterator(): \Iterator
Devuelve un iterador para recorrer los valores del canal. Channel implementa
la interfaz IteratorAggregate, por lo que puede usar foreach directamente.
El iterador suspende la corrutina actual mientras espera el siguiente valor. La iteración termina cuando el canal está cerrado y el búfer está vacío.
Importante: Si el canal nunca se cierra,
foreachesperará nuevos valores indefinidamente.
Valores de retorno
Un objeto \Iterator para recorrer los valores del canal.
Ejemplos
Ejemplo #1 Lectura de un canal con foreach
<?php
use Async\Channel;
$channel = new Channel(10);
spawn(function() use ($channel) {
$channel->send('uno');
$channel->send('dos');
$channel->send('tres');
$channel->close(); // sin esto, foreach nunca terminará
});
spawn(function() use ($channel) {
foreach ($channel as $value) {
echo "Recibido: $value\n";
}
echo "Todos los valores procesados\n";
});
Ejemplo #2 Patrón productor-consumidor
<?php
use Async\Channel;
$jobs = new Channel(20);
// Productor
spawn(function() use ($jobs) {
$urls = ['https://example.com/1', 'https://example.com/2', 'https://example.com/3'];
foreach ($urls as $url) {
$jobs->send($url);
}
$jobs->close();
});
// Consumidor
spawn(function() use ($jobs) {
foreach ($jobs as $url) {
$response = httpGet($url);
echo "Descargado: $url ({$response->status})\n";
}
});
Ver también
- Channel::recv — Recibir un solo valor
- Channel::close — Cerrar el canal (termina la iteración)
- Channel::isEmpty — Verificar si el búfer está vacío