mcpField
C
csharp-async

csharp-async

github.com/github开发40.5k10.9k 次安装1 天前更新
代码仓库

关于 csharp-async

用于按命名、返回类型、异常处理、性能和常见陷阱等准则审查 C# 异步代码的技能,帮助开发者发现问题并提出改进建议。

主要功能

  1. 01遵循异步方法命名规范
  2. 02选择合适的 Task 返回类型
  3. 03审查异常处理方式
  4. 04检查异步性能问题
  5. 05发现阻塞调用等常见陷阱

适用场景

  1. 01审查 C# 异步代码
  2. 02改进异步 API 模式
  3. 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