关于协程并发的问题? Barrier::wait($barrier)没能正常工作?

bobshipwood

问题描述

如下图,能正常的到$aa数组,

            $barrier = Barrier::create();
            $aa = [];
            for ($i=1; $i<5; $i++) {
                Coroutine::create(function () use ($barrier, $i, &$aa) {
                    sleep(1);
                    $aa[] = $i;
                });
            }
            // Wait all coroutine done
            Barrier::wait($barrier);
            echo 'all finished';
            var_dump($aa);

        };

照葫芦画瓢,但到了这里就不行了?

$barrier = Barrier::create();
$plcs = [];
foreach ($devicePlcs as $devicePlc) {
    Coroutine::create(function () use ($devicePlc, &$plcs) {
        $plcs[] = $this->test($devicePlc); // 执行实际业务代码;
    });
}
Barrier::wait($barrier);
var_dump($plcs);

 public function test($test)
 {
     static $n = 0;
     sleep(5);
     $n++;
     return $n;
 }

为此你搜索到了哪些方案及不适用的原因

找不到

47 0 0
0个回答

🔝