关于 csharp-async
用于按命名、返回类型、异常处理、性能和常见陷阱等准则审查 C# 异步代码的技能,帮助开发者发现问题并提出改进建议。
主要功能
- 01遵循异步方法命名规范
- 02选择合适的 Task 返回类型
- 03审查异常处理方式
- 04检查异步性能问题
- 05发现阻塞调用等常见陷阱
适用场景
- 01审查 C# 异步代码
- 02改进异步 API 模式
- 03查找阻塞调用和异常处理问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill csharp-async安装后在 Claude Code 中输入/csharp-async确认已加载。
详细介绍
C# 异步编程最佳实践
你的目标是帮助我遵循 C# 中异步编程的最佳实践。
命名约定
- 为所有异步方法使用 'Async' 后缀
- 在适用的情况下,让方法名与其同步对应方法保持一致(例如,为
GetData()使用GetDataAsync())
返回类型
- 当方法返回值时,返回
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 方法(事件处理程序除外)
- 始终 await 返回 Task 的方法
实现模式
- 针对长时间运行的操作实现异步命令模式
- 使用异步流(IAsyncEnumerable)异步处理序列
- 为公共 API 考虑基于任务的异步模式(TAP)
在审查我的 C# 代码时,识别这些问题,并建议遵循这些最佳实践的改进方案。
评论
支持 Markdown