WaitGroup
EasySwoole
基于 Swoole
的 Channel
封裝實(shí)現(xiàn)了 Golang
的 sync.WaitGroup
功能。具體使用示例可以看下文:
提供的方法
add
方法增加計(jì)數(shù)done
表示任務(wù)已完成wait
等待所有任務(wù)完成恢復(fù)當(dāng)前協(xié)程的執(zhí)行WaitGroup
對象可以復(fù)用,add
、done
、wait
之后可以再次使用
使用示例代碼
<?php
go(function () {
$ret = [];
$wait = new \EasySwoole\Component\WaitGroup();
$wait->add();
// 啟動(dòng)第 1 個(gè)協(xié)程
go(function () use ($wait, &$ret) {
// 模擬耗時(shí)任務(wù) 1
\co::sleep(0.1);
$ret[] = time();
$wait->done();
});
$wait->add();
// 啟動(dòng)第 2 個(gè)協(xié)程
go(function () use ($wait, &$ret) {
// 模擬耗時(shí)任務(wù) 2
\co::sleep(2);
$ret[] = time();
$wait->done();
});
// 掛起當(dāng)前協(xié)程,等待所有任務(wù)完成后恢復(fù)
$wait->wait();
// 這里 $ret 包含了 2 個(gè)任務(wù)執(zhí)行結(jié)果
var_dump($ret);
});