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# 程式碼時,請找出這些問題並提出遵循這些最佳做法的改進建議。






