TaskSet::getIterator

(PHP 8.6+, True Async 1.0)

public TaskSet::getIterator(): Iterator

Gibt einen Iterator zurück, der Ergebnisse liefert, sobald Tasks abgeschlossen werden. TaskSet implementiert IteratorAggregate, sodass foreach direkt verwendet werden kann.

Jeder verarbeitete Eintrag wird automatisch aus dem Set entfernt, wodurch Speicher freigegeben und count() verringert wird.

Iterator-Verhalten

Wichtig: Ohne Aufruf von seal() wartet die Iteration unbegrenzt.

Beispiele

Beispiel #1 Stream-Verarbeitung

<?php

use Async\TaskSet;

spawn(function() {
    $set = new TaskSet(concurrency: 5);

    for ($i = 0; $i < 100; $i++) {
        $set->spawn(fn() => processItem($items[$i]));
    }
    $set->seal();

    foreach ($set as $key => [$result, $error]) {
        if ($error !== null) {
            echo "Task $key: Fehler — {$error->getMessage()}\n";
            continue;
        }
        echo "Task $key: fertig\n";
        // Eintrag entfernt, Speicher freigegeben
    }

    echo $set->count() . "\n"; // 0
});

Beispiel #2 Benannte Schlüssel

<?php

use Async\TaskSet;

spawn(function() {
    $set = new TaskSet();

    $set->spawnWithKey('users', fn() => fetchUsers());
    $set->spawnWithKey('orders', fn() => fetchOrders());
    $set->seal();

    foreach ($set as $key => [$result, $error]) {
        if ($error === null) {
            echo "$key: " . count($result) . " Datensätze empfangen\n";
        }
    }
});

Siehe auch