mcpField
C
csharp-async

csharp-async

github.com/github開発40.5k10.9k 回インストール今日更新
リポジトリ

csharp-async について

命名、戻り値、例外処理、パフォーマンス、よくある問題の指針に基づき、C# の非同期コードをレビューするスキルです。問題の特定と改善案の提示に役立ちます。

主な機能

  1. 01非同期メソッドの命名規則を適用
  2. 02適切な Task 戻り値を選択
  3. 03例外処理の方法を確認
  4. 04非同期処理の性能上の懸念を確認
  5. 05ブロッキングなどのよくある問題を検出

活用シーン

  1. 01C# 非同期コードのレビュー
  2. 02非同期 API パターンの改善
  3. 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# コードをレビューする際は、これらの問題を特定し、これらのベストプラクティスに従った改善を提案してください。

コメント