mcpField
C
csharp-async

csharp-async

github.com/midudev開発7.0k57 回インストール2 週間前に更新
リポジトリ

csharp-async について

C# の非同期コードを作成またはレビューする開発者向けのベストプラクティススキルです。タスクの戻り値、例外処理、性能、キャンセル、ブロッキングの落とし穴を扱います。

主な機能

  1. 01非同期メソッドの命名規則
  2. 02Task と ValueTask の戻り値指針
  3. 03例外とキャンセルの処理
  4. 04並列タスクとタイムアウトのパターン
  5. 05ブロッキングを伴う非同期コードへの注意

活用シーン

  1. 01C# 非同期メソッドのレビュー
  2. 02タスクベースの公開 API の設計
  3. 03独立した処理の並行実行
  4. 04デッドロックや処理のブロックの回避

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/midudev/autoskills --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# コードをレビューする際は、これらの問題を特定し、これらのベストプラクティスに従った改善を提案してください。

コメント