🚀 快速安装
复制以下命令并运行,立即安装此 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 原始英文文档,方便对照翻译。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)