用途:为 .NET 应用提供 async/await 最佳实践指导,覆盖正确的 Task 用法、取消传播,以及 AI 代理生成异步代码时最常见的错误。
主要能力:
- 核心规则:全程 async(async all the way),调用链每层都 async 并 await,避免混用同步与异步导致死锁或线程池饥饿。
- 返回类型:默认用 Task/Task<T>;方法常同步完成(缓存命中、缓冲 I/O)时用 ValueTask<T> 减少分配。ValueTask 不得 await 多次,不得对未完成的 ValueTask 用 .Result 或 .GetAwaiter().GetResult(),需要多次等待或传递时用 .AsTask() 转换。
- ConfigureAwait:库代码用 ConfigureAwait(false) 避免捕获同步上下文;ASP.NET Core、控制台等应用代码无同步上下文,无需使用。
- 取消:始终接收并转发 CancellationToken,不静默丢弃;可用 CancellationTokenSource.CreateLinkedTokenSource 结合超时,用 ThrowIfCancellationRequested 响应取消。
- 并行与流式:独立操作用 Task.WhenAll;有界并行用 Parallel.ForEachAsync(.NET 6+)配合 MaxDegreeOfParallelism;流式结果用 IAsyncEnumerable<T> 配合 [EnumeratorCancellation]。
- 后台工作:用 BackgroundService/IHostedService,而非 Task.Run 或即发即弃。
- 测试:用 async 测试方法,断言 OperationCanceledException 等取消行为。
常见代理陷阱:对异步结果用 .Result/.Wait()/.GetAwaiter().GetResult() 阻塞(仅 Main 或静态构造函数、Dispose 等极少数场景例外);async void(仅事件处理器可用);漏传 CancellationToken;即发即弃且无异常处理。
范围外:线程同步原语、Channel 生产者/消费者、BackgroundService 注册与生命周期由其他技能覆盖。
限制:本技能应用公开文档化指导,不代表或代言所引用的来源;具体版本行为与项目约束需自行核实。