🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install github/awesome-copilot/csharp-async

💡 提示:需要 Node.js 和 NPM

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)异步处理序列
  • 对公共 API 考虑基于任务的异步模式 (TAP)

在审查我的 C# 代码时,请识别这些问题,并提出遵循这些最佳实践的改进建议。

📄 原始文档

完整文档(英文):

https://skills.sh/github/awesome-copilot/csharp-async

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。