What problem does it solve? Writing asynchronous C# code correctly is error-prone: developers commonly create async void methods, block on tasks with .Result, or forget the Async suffix, leading to deadlocks, swallowed exceptions, and inconsistent APIs. This Skill provides a structured checklist of async best practices so an AI assistant can review your C# code and flag violations. ## Core Features & Use Cases - Naming and Return Type Guidance: Enforces the Async suffix convention and correct use of Task, Task<T>, and ValueTask<T> return types. - Deadlock and Exception Prevention: Detects blocking calls like .Wait() and .Result, missing ConfigureAwait(false) in library code, and swallowed exceptions. - Performance Patterns: Recommends Task.WhenAll for parallelism, cancellation tokens for long-running operations, and IAsyncEnumerable<T> for async streams. - Use Case: Paste a C# service class containing data access methods and ask for a review; the Skill identifies async void handlers, missing awaits, and blocking calls, then suggests corrected implementations. ## Quick Start Review my C# code for async programming best practices and suggest improvements following the csharp-async guidelines.