# 异步

**把代码块丢去并发执行,立即返回任务句柄。**

```xuantie
设 任务 = 异步 {
    时.睡(100)
    返 42
}
设 返值 = 等待(任务)
```

## 你可以……

- **后台跑耗时操作,主线程继续干别的**——最后再用 `等待` 收尾:

```xuantie
设 任务 = 异步 {
    示("任务执行中...")
    时.睡(1000)
}
示("主线程继续执行...")
等待(任务)
```

- **并发发起一批任务,逐个等待汇总**——每个地址一个独立块:

```xuantie
设 们 = []
遍历 u 于 ["http://a.com/1", "http://a.com/2"] {
    设 地址 = u
    们.追加(异步 {
        设 r = 求(地址)
        若 r.成功 { 示(地址 & " 完成") }
    })
}
遍历 t 于 们 { 等待(t) }
```

## 注意

- 执行层由编译器按挂起点位置自动路由:`等待`/`收`/`发`/`选`/`时.睡` 只在语句级 → fiber(轻量);任一出现在循环体内 → 整块走线程池,运行期独占一个 worker 线程。
- 块内捕获的外层局部变量是启动时刻的值副本:外层之后再改它看不到,块内改了也不写回。要共享请走通道或全局变量。
- 循环里批量起任务必须逐迭代捕获(上面 `设 地址 = u` 那行):直接捕获循环变量,所有任务都会拿到循环结束后的终值。

## 相关

[等待](等待.md) · [并行](并行.md) · [道](道.md)