相关 Skills
SKILL.md
readonly只读
name
csharp-async
description
获取 C# 异步编程的最佳实践
C# 异步编程最佳实践
你的目标是帮助我遵循 C# 异步编程的最佳实践。
命名约定
- 所有异步方法使用 'Async' 后缀
- 在适用的情况下,方法名与其同步版本匹配(例如,
GetDataAsync()对应GetData())
返回类型
- 当方法返回值时返回
Task<T> - 当方法不返回值时返回
Task - 在高性能场景中考虑使用
ValueTask<T>以减少分配 - 避免异步方法返回
void,除非是事件处理程序
异常处理
- 在 await 表达式周围使用 try/catch 块
- 避免在异步方法中吞掉异常
- 在库代码中适当使用
ConfigureAwait(false)以防止死锁 - 在返回 Task 的异步方法中使用
Task.FromException()传播异常,而不是直接抛出
性能
- 使用
Task.WhenAll()并行执行多个任务 - 使用
Task.WhenAny()实现超时或获取第一个完成的任务 - 避免在仅传递任务结果时使用不必要的 async/await
- 考虑为长时间运行的操作使用取消令牌
常见陷阱
- 永远不要在异步代码中使用
.Wait()、.Result或.GetAwaiter().GetResult() - 避免混合阻塞代码和异步代码
- 不要创建 async void 方法(事件处理程序除外)
- 始终等待返回 Task 的方法
实现模式
- 为长时间运行的操作实现异步命令模式
- 使用异步流(IAsyncEnumerable<T>)异步处理序列
- 对于公共 API,考虑基于任务的异步模式(TAP)
在审查我的 C# 代码时,识别这些问题并提出遵循这些最佳实践的改进建议。






