csharp-async

csharp-async

热门

获取 C# 异步编程的最佳实践

3.6万Star
0Fork
更新于 2026/7/11
SKILL.md
readonly只读
name
csharp-async
description

获取 C# 异步编程的最佳实践

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

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