mcpField
C
csharp-async

csharp-async

github.com/midudev开发7.0k57 次安装2 周前更新
代码仓库

关于 csharp-async

面向编写或审查 C# 异步代码的开发者,汇总异步编程实践。内容涵盖任务返回类型、异常处理、性能、取消机制及常见阻塞问题。

主要功能

  1. 01异步方法命名约定
  2. 02Task 与 ValueTask 返回建议
  3. 03异常与取消处理
  4. 04并行任务与超时模式
  5. 05阻塞式异步代码警示

适用场景

  1. 01审查 C# 异步方法
  2. 02设计基于任务的公共 API
  3. 03并发执行相互独立的操作
  4. 04避免死锁和执行阻塞

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/midudev/autoskills --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