csharp-async

csharp-async

熱門

取得 C# 非同步程式設計的最佳做法

3.6萬星標
0分支
更新於 2026/7/11
SKILL.md
readonlyread-only
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 方法(事件處理常式除外)
  • 務必 await 回傳 Task 的方法

實作模式

  • 對長時間執行的作業實作非同步命令模式
  • 使用非同步串流(IAsyncEnumerable<T>)非同步處理序列
  • 對公開 API 考慮使用工作基礎非同步模式(TAP)

在審查我的 C# 程式碼時,請找出這些問題並提出遵循這些最佳做法的改進建議。