SuperAPI AI 工具集

dotnet-csharp-async-patterns

通用与其它

查看项目

更新于 10-16 00:20

技能介绍

用途:为 .NET 应用编写正确的 async/await 代码,覆盖任务使用、取消传播,以及 AI 代理生成异步代码时最常见的错误。

主要能力:强调“全程异步”,调用链中每个方法都应 async 并 await,避免混用同步与异步导致死锁或线程池饥饿;默认返回 Task 或 Task<T>,在频繁同步完成(缓存命中、缓冲 I/O)时用 ValueTask<T> 减少分配,并遵守 ValueTask 规则:不可多次 await、不可对未完成的 ValueTask 使用 .Result 或 .GetAwaiter().GetResult(),需要多次等待或传递时用 .AsTask() 转换。

常见陷阱:禁止对异步使用 .Result、.Wait()、.GetAwaiter().GetResult() 阻塞;避免 async void(仅事件处理器可用);库代码使用 ConfigureAwait(false),ASP.NET Core 等应用代码通常不需要;避免无错误处理的 fire-and-forget,必要时至少记录异常;始终接收并转发 CancellationToken。

取消与并行:用 CancellationTokenSource.CreateLinkedTokenSource 结合超时;循环中调用 ct.ThrowIfCancellationRequested();独立操作可用 Task.WhenAll,.NET 6+ 可用 Parallel.ForEachAsync 控制并发度;流式结果用 IAsyncEnumerable<T> 配合 [EnumeratorCancellation]。

后台工作:使用 BackgroundService 或 IHostedService,而非 Task.Run 或 fire-and-forget。测试部分给出异步测试与取消断言示例。

限制:内容为公开最佳实践整理,不涉及具体收费、平台或效果承诺;部分关联技能(依赖注入、编码规范、现代模式)仅作交叉引用,未在本文展开。