# task_all

## 功能

等待一组后台任务全部完成，并按输入顺序返回每个任务的成功结果。`task_all(tasks)` 是同步组合等待函数，不会取消未完成任务。

## 语法

```bt
values = task_all(tasks)
```

## 参数

| 参数 | 类型 | 必填 | 默认值 | 说明 |
| ------ | ------ | ------ | ------ | ------ |
| tasks | Array&lt;Task&gt; | 是 | 无 | 要等待的 Task 数组。 |

## 返回值

| 类型 | 说明 |
| ------ | ------ |
| Array | 全部任务成功时，按输入顺序返回结果数组；空数组返回 `[]`。 |

如果任一任务 `throw` 或普通失败，`task_all()` 会等待输入中的任务全部完成，然后按输入顺序选择第一个非成功结果：`throw` 会重新抛出，普通失败会返回运行时错误。

## 示例

```bt
t1 = task(fn() {
    return 1
})

t2 = task(fn() {
    return 2
})

values = task_all([t1, t2])

// 输出：[1,2]
print json(values)
```

```bt
slow = task(fn() {
    sleep(100)
    return 'slow'
})

fast = task(fn() {
    return 'fast'
})

values = task_all([slow, fast])

// 输出：["slow","fast"]
print json(values)
```

## 注意事项

- 参数必须是数组，数组元素必须全部是 Task。
- `task_all([])` 返回空数组 `[]`。
- 任务在创建时已经并发执行，`task_all()` 按输入顺序等待结果不会把任务执行变成串行。
- `task_all()` 会阻塞当前执行流；Web 请求热路径中应谨慎使用。
- 其他任务失败时不会强制取消仍在运行的任务。
