WaitGroup

EasySwoole 基于 SwooleChannel 封装实现了 Golangsync.WaitGroup 功能。具体使用示例可以看下文:

提供的方法

  • add 方法增加计数
  • done 表示任务已完成
  • wait 等待所有任务完成恢复当前协程的执行
  • WaitGroup 对象可以复用,adddonewait 之后可以再次使用

使用示例代码

  1. <?php
  2. go(function () {
  3. $ret = [];
  4. $wait = new \EasySwoole\Component\WaitGroup();
  5. $wait->add();
  6. // 启动第 1 个协程
  7. go(function () use ($wait, &$ret) {
  8. // 模拟耗时任务 1
  9. \co::sleep(0.1);
  10. $ret[] = time();
  11. $wait->done();
  12. });
  13. $wait->add();
  14. // 启动第 2 个协程
  15. go(function () use ($wait, &$ret) {
  16. // 模拟耗时任务 2
  17. \co::sleep(2);
  18. $ret[] = time();
  19. $wait->done();
  20. });
  21. // 挂起当前协程,等待所有任务完成后恢复
  22. $wait->wait();
  23. // 这里 $ret 包含了 2 个任务执行结果
  24. var_dump($ret);
  25. });