父进程如何知道子进程全部结束(或者是:如何判断所有异步结束)

eyunzhu

在实现异步任务过程中,有个需求是for循环任务下发给‘任务进程服务端’,那如何判断所有异步任务都完成了呢?

我使用了如图方式:
截图
此中方式可以实现单此请求时正常

但是当我同时多次进行for循环任务下发就不正常了,比如下发6次任务,他只输出两次‘任务完成’

请问如何实现想要的结果呢

2494 3 0
3个回答

six

if ($times >= 15)  这个判断去掉就可以输出6次了

  • 暂无评论
eyunzhu

额,不可以的
我的程序流程是:如图,每个一级任务都会循环下发15次异步任务,那我连续下发6个一级任务,也就是6*15=95个异步任务。
我如何知道这6个一级任务其子15个异步任务完成了呢。

  • 暂无评论
six

哦,你开始没描述清楚。
$times 不要用全局变量来记录,因为每一级任务都可能会覆盖这个变量。我觉得把times放到$task_connection对象里来记录会好一些。因为每个$task_connection都是独立的,互相不会覆盖数据。

$task_connection->onMessage = function($task_connection, $result){
        if (!isset($task_connection->times)) $task_connection->times = 0;
        if (++$task_connection->times >= 15) {
            echo "任务完成";
        }
};
  • 暂无评论
年代过于久远,无法发表回答
🔝