在實(shí)現(xiàn)異步任務(wù)過程中,有個(gè)需求是for循環(huán)任務(wù)下發(fā)給‘任務(wù)進(jìn)程服務(wù)端’,那如何判斷所有異步任務(wù)都完成了呢?
我使用了如圖方式:
此中方式可以實(shí)現(xiàn)單此請(qǐng)求時(shí)正常
但是當(dāng)我同時(shí)多次進(jìn)行for循環(huán)任務(wù)下發(fā)就不正常了,比如下發(fā)6次任務(wù),他只輸出兩次‘任務(wù)完成’
請(qǐng)問如何實(shí)現(xiàn)想要的結(jié)果呢
額,不可以的
我的程序流程是:如圖,每個(gè)一級(jí)任務(wù)都會(huì)循環(huán)下發(fā)15次異步任務(wù),那我連續(xù)下發(fā)6個(gè)一級(jí)任務(wù),也就是6*15=95個(gè)異步任務(wù)。
我如何知道這6個(gè)一級(jí)任務(wù)其子15個(gè)異步任務(wù)完成了呢。
哦,你開始沒描述清楚。
$times 不要用全局變量來記錄,因?yàn)槊恳患?jí)任務(wù)都可能會(huì)覆蓋這個(gè)變量。我覺得把times放到$task_connection對(duì)象里來記錄會(huì)好一些。因?yàn)槊總€(gè)$task_connection都是獨(dú)立的,互相不會(huì)覆蓋數(shù)據(jù)。
$task_connection->onMessage = function($task_connection, $result){
if (!isset($task_connection->times)) $task_connection->times = 0;
if (++$task_connection->times >= 15) {
echo "任務(wù)完成";
}
};