代码拉取完成,页面将自动刷新
<?php
/**
* Class YieldScheduler
*/
Class YieldScheduler
{
/**
* @var array $gens
*/
public $gens = array();
/**
* 新增任务到 调度器
*
* @param Generator $gen
* @param null $key
*
* @return $this
*/
public function add($gen, $key = null)
{
if (null === $key) {
$this->gens[] = $gen;
} else {
$this->gens[$key] = $gen;
}
return $this;
}
/**
* 开始
*/
public function start()
{
$keepRun = true;
/**
* @var Generator $gen
*/
$gen = null;
do {
// 循环调度任务
foreach ($this->gens as $id => $gen) {
$re = $gen->current();
echo 'generator id: ' . $id . ' run, get current re : ' . $re . PHP_EOL;
$gen->next();
}
// 检查任务是否已完成
foreach ($this->gens as $id => $gen) {
$check = $gen->valid();
if (!$check) {
// 已执行完毕的任务就可以踢出任务调度队列了
unset($this->gens[$id]);
}
}
// 调度器是否完成所有任务
if (0 >= count($this->gens)) {
$keepRun = false;
}
} while ($keepRun);
}
}
function yieldFunc($max = 10)
{
for($i = 0; $i < $max; $i ++) {
(yield $i);
}
return $i;
}
$gen1 = yieldFunc(3);
$gen2 = yieldFunc(5);
$scheduler = new YieldScheduler();
$scheduler->add($gen1)->add($gen2);
$scheduler->start();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。