使用waitgroup 在协程中通讯:
<?php
Co\run(function () {
$wg = new \Swoole\Coroutine\WaitGroup();
$result = [];
$wg->add();//协程数量加1
$time = microtime(true);
//启动第一个协程
go(function () use ($wg, &$result) {//use 关键字 函数闭包 调用外部变量
co::sleep(1);
$result['data0'] = "lala";
echo "协程1 任务完成\n";
$wg->done();//本协程任务完成
});
$wg->add();//协程数量加1
//启动第二个协程
go(function () use ($wg, &$result) {
co::sleep(2);
$result['data1'] = "lala";
echo "协程2 任务完成\n";
$wg->done();//本协程任务完成
});
//挂起父协程,等待所有子协程任务完成后恢复
$wg->wait();
echo "所有协程任务完成,总耗时".(microtime(true)-$time)."s\n";
//这里 $result 包含了 2 个任务执行结果
var_dump($result);
});