TaskGroup::awaitCompletion
(PHP 8.6+, True Async 1.0)
public TaskGroup::awaitCompletion(): void
等待组中所有任务完全完成。
与 all() 不同,它不返回结果,也不会因任务错误而抛出异常。
调用此方法前必须先密封组。
典型用例是在 cancel() 后等待协程真正结束。
cancel() 方法发起取消操作,但协程可能异步完成。
awaitCompletion() 保证所有协程已停止。
错误
如果组未密封,抛出 Async\AsyncException。
示例
示例 #1 取消后等待
<?php
use Async\TaskGroup;
use function Async\suspend;
spawn(function() {
$group = new TaskGroup();
$group->spawn(function() {
suspend();
return "result";
});
$group->cancel();
$group->awaitCompletion();
echo "所有协程已结束\n";
var_dump($group->isFinished()); // bool(true)
});
示例 #2 等待后获取结果
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fail"));
$group->seal();
$group->awaitCompletion();
// 不会抛出异常 --- 手动检查
$results = $group->getResults();
$errors = $group->getErrors();
echo "成功: " . count($results) . "\n"; // 1
echo "错误: " . count($errors) . "\n"; // 1
});
参见
- TaskGroup::all — 等待所有任务并获取结果
- TaskGroup::cancel — 取消所有任务
- TaskGroup::seal — 密封组