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