用途:在 GPUI 中处理异步操作与后台任务,涵盖前台 UI 更新与后台计算两类并发场景。
主要能力:前台任务运行在 UI 线程,可 await 并更新实体,使用 cx.spawn;后台任务运行在工作线程,适合 CPU 密集工作,使用 cx.background_spawn。所有实体更新都发生在前台线程。支持任务管理(Task 类型,任务在 drop 时自动取消,需存入结构体以保持存活)、异步数据获取、后台计算后回前台更新 UI、周期性任务与任务取消。
使用方式:前台任务示例为 cx.spawn(async move |cx| { ... }).detach(),在回调内通过 entity.update(cx, |state, cx| { ... cx.notify(); }) 更新状态。后台任务用 cx.background_spawn(async move { ... }).then(cx.spawn(move |result, cx| { ... })).detach() 链式回到前台更新。周期性任务可在 spawn 内用 tokio::time::sleep(Duration::from_secs(5)).await 循环。
限制与陷阱:不要在后台任务中更新实体(编译错误),应改用前台任务或链式调用;在 defer_in 回调内不要对同一实体调用 entity.update(cx, …) 或 entity.read(cx),否则会重入锁并 panic(cannot update … while it is already being updated),应使用回调提供的 &mut 引用直接访问。
适用场景:异步数据获取、后台耗时计算、轮询、防抖、并行任务等。更多 API、模式与最佳实践见 api-reference.md、patterns.md、best-practices.md。