Channel::getIterator
(PHP 8.6+, True Async 1.0)
public Channel::getIterator(): \Iterator
Gibt einen Iterator zum Durchlaufen der Channel-Werte zurück. Channel implementiert
das IteratorAggregate-Interface, sodass Sie foreach direkt verwenden können.
Der Iterator suspendiert die aktuelle Coroutine, während er auf den nächsten Wert wartet. Die Iteration endet, wenn der Channel geschlossen und der Puffer leer ist.
Wichtig: Wenn der Channel nie geschlossen wird, wartet
foreachunbegrenzt auf neue Werte.
Rückgabewerte
Ein \Iterator-Objekt zum Durchlaufen der Channel-Werte.
Beispiele
Beispiel #1 Einen Channel mit foreach lesen
<?php
use Async\Channel;
$channel = new Channel(10);
spawn(function() use ($channel) {
$channel->send('eins');
$channel->send('zwei');
$channel->send('drei');
$channel->close(); // Ohne dies wird foreach nie enden
});
spawn(function() use ($channel) {
foreach ($channel as $value) {
echo "Empfangen: $value\n";
}
echo "Alle Werte verarbeitet\n";
});
Beispiel #2 Producer-Consumer-Muster
<?php
use Async\Channel;
$jobs = new Channel(20);
// Produzent
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();
});
// Konsument
spawn(function() use ($jobs) {
foreach ($jobs as $url) {
$response = httpGet($url);
echo "Heruntergeladen: $url ({$response->status})\n";
}
});
Siehe auch
- Channel::recv — Einen einzelnen Wert empfangen
- Channel::close — Den Channel schließen (beendet die Iteration)
- Channel::isEmpty — Prüfen, ob der Puffer leer ist