定时器Timer 模拟任务队列,任务重复问题

柒企鹅

麻烦 walkor 有时间帮我看一下,
在处理数据的定时器中,会出现重复的任务,
任务数组我是以数据库逻辑id为下标的,
希望能帮忙指出问题在哪?或有什么更好的实现方式

 $queue = array(); // 任务数组

        //  查询任务定时器
        Timer::add(1, function () use (&$queue, $getSwitch) {

            $list = $getSwitch->get_all_task();  // 从数据库里查询出来的数组,条件是状态为0,逻辑ID做数组下标

            $task = array_diff_key($list, $queue);

            $queue = array_merge($queue, $task);

        });

        // 处理数据
        Timer::add(0.2, function () use (&$queue, $getSwitch) {

            $bunk = current($queue);

            $getSwitch->set_task_status((int)$bunk, 1); // 修改状态为1

            $task = array_shift($queue);  // 修改状态再弹出数组

            // 重置内部指针
            reset($queue);

            /_ CODE 处理$task任务 _/

        });
3814 1 0
1个回答

walkor 打赏

看不出来啊

  • 暂无评论
年代过于久远,无法发表回答
×
🔝