csharp-async について
命名、戻り値、例外処理、パフォーマンス、よくある問題の指針に基づき、C# の非同期コードをレビューするスキルです。問題の特定と改善案の提示に役立ちます。
主な機能
- 01非同期メソッドの命名規則を適用
- 02適切な Task 戻り値を選択
- 03例外処理の方法を確認
- 04非同期処理の性能上の懸念を確認
- 05ブロッキングなどのよくある問題を検出
活用シーン
- 01C# 非同期コードのレビュー
- 02非同期 API パターンの改善
- 03ブロッキング呼び出しや例外処理の問題を特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --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 メソッドを作成しないでください(イベントハンドラーを除く)
- Task を返すメソッドは常に await します
実装パターン
- 長時間実行される操作には非同期コマンドパターンを実装します
- シーケンスを非同期的に処理するには非同期ストリーム(IAsyncEnumerable)を使用します
- パブリック API にはタスクベースの非同期パターン(TAP)を検討します
私の C# コードをレビューする際は、これらの問題を特定し、これらのベストプラクティスに従った改善を提案してください。
コメント
Markdown 対応