Как работает Pool :: collect?
Помогите мне понять, как именно работает Pool :: collect.
Pool :: collect - собирает ссылки на выполненные задачи
public void Pool::collect ( Callable $collector )
То, что я предполагаю, было:Pool::collect
регистрирует функцию, которая будет вызываться после каждого\Threaded $task
выполнен. Так я и сделал:
<?php
$pool = new Pool(4);
$pool->collect($collector);
$pool->submit(new Task);
Не сработало Но следующее делает:
<?php
$pool = new Pool(4);
$pool->submit(new Task);
$pool->collect($collector);
Итак, я думаю, чтоPool::collect
делает это: прикрепляет$collector
для каждого\Threaded $task
ранее представлен.
Теперь, когда именно$collector
называется? Я полагаю, был вызван послеThreaded::run()
выполнен. Опять не так.
<?php
class Task extends Threaded {
public function run () { echo "Task complete\n"; }
}
$collector = function (\Task $task) {
echo "Collect task\n";
return true;
};
$pool = new Pool(4);
$pool->submit(new Task);
$pool->collect($collector);
$pool->shutdown();
Выходы:
Collect task
Task complete
$collector
называется раньшеThreaded::run()
выполнен.
Документация не говорит много. Разве событие не говорит о том, что$collector
должен вернуть логическое значение.Я этого не знала.
Я пытался использовать Pool :: collect как своего рода обратный вызов после того, как каждое задание $ выполнено. Я думаю, что я на неправильном пути.
Редактировать 1.Как насчет этой попытки?