TaskSet::getIterator

(PHP 8.6+, True Async 1.0)

public TaskSet::getIterator(): Iterator

Возвращает итератор, который выдаёт результаты по мере завершения задач. TaskSet реализует IteratorAggregate, поэтому можно использовать foreach напрямую.

Каждая обработанная запись автоматически удаляется из набора, что освобождает память и уменьшает count().

Поведение итератора

Важно: Без вызова seal() итерация будет ждать бесконечно.

Примеры

Пример #1 Потоковая обработка

<?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 "Задача $key: ошибка — {$error->getMessage()}\n";
            continue;
        }
        echo "Задача $key: готово\n";
        // Запись удалена, память освобождена
    }

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

Пример #2 Именованные ключи

<?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) . " записей\n";
        }
    }
});

См. также