array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'class.parallel-future.php', 1 => 'parallel\\Future', ), 'up' => array ( 0 => 'book.parallel.php', 1 => 'parallel', ), 'prev' => array ( 0 => 'parallel-runtime.kill.php', 1 => 'parallel\\Runtime::kill', ), 'next' => array ( 0 => 'parallel-future.cancel.php', 1 => 'parallel\\Future::cancel', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/parallel/parallel.future.xml', ), 'extra_header_links' => array ( 'rel' => 'alternate', 'href' => '/manual/en/feeds/class.parallel-future.atom', 'type' => 'application/atom+xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(0.8.0)
Future представляет возвращаемое значение или неперехваченное исключение из задачи и предоставляет API для отмены.
Пример #1 Пример, показывающий Future как возвращаемое значение
<?php
$runtime = new \parallel\Runtime;
$future = $runtime->run(function(){
return "Мир";
});
printf("Привет, %s\n", $future->value());
?>
Вывод приведённого примера будет похож на:
Привет, Мир
Поведение Future также позволяет использовать его в качестве простой точки синхронизации, даже если задача не возвращает значение явно.
Пример #2 Пример, показывающий Future как точку синхронизации
<?php
$runtime = new \parallel\Runtime;
$future = $runtime->run(function(){
echo "в дочернем потоке ";
for ($i = 0; $i < 500; $i++) {
if ($i % 10 == 0) {
echo ".";
}
}
echo " выход из дочернего потока";
});
$future->value();
echo "\nродительский поток продолжает работать\n";
?>
Вывод приведённого примера будет похож на:
в дочернем потоке .................................................. выход из дочернего потока родительский поток продолжает работать