Skip to content
AI & Agents
Skill

/csharp-async

Get best practices for C# async programming

From plugin
awesome-copilot
39k200 skills200 agents
Install
$ npx -y skills add github/awesome-copilot --skill csharp-async --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/csharp-async

Context preview

The summary Claude sees to decide when to auto-load this skill.

Get best practices for C# async programming

SKILL.md

csharp-async.SKILL.md
name: csharp-async
description: 'Get best practices for C# async programming'

C# Async Programming Best Practices

Your goal is to help me follow best practices for asynchronous programming in C#.

Naming Conventions

  • Use the 'Async' suffix for all async methods
  • Match method names with their synchronous counterparts when applicable (e.g., `GetDataAsync()` for `GetData()`)

Return Types

  • Return `Task<T>` when the method returns a value
  • Return `Task` when the method doesn't return a value
  • Consider `ValueTask<T>` for high-performance scenarios to reduce allocations
  • Avoid returning `void` for async methods except for event handlers

Exception Handling

  • Use try/catch blocks around await expressions
  • Avoid swallowing exceptions in async methods
  • Use `ConfigureAwait(false)` when appropriate to prevent deadlocks in library code
  • Propagate exceptions with `Task.FromException()` instead of throwing in async Task returning methods

Performance

  • Use `Task.WhenAll()` for parallel execution of multiple tasks
  • Use `Task.WhenAny()` for implementing timeouts or taking the first completed task
  • Avoid unnecessary async/await when simply passing through task results
  • Consider cancellation tokens for long-running operations

Common Pitfalls

  • Never use `.Wait()`, `.Result`, or `.GetAwaiter().GetResult()` in async code
  • Avoid mixing blocking and async code
  • Don't create async void methods (except for event handlers)
  • Always await Task-returning methods

Implementation Patterns

  • Implement the async command pattern for long-running operations
  • Use async streams (IAsyncEnumerable<T>) for processing sequences asynchronously
  • Consider the task-based asynchronous pattern (TAP) for public APIs

When reviewing my C# code, identify these issues and suggest improvements that follow these best practices.

Read more
Ships withawesome-copilot

A community-created collection of custom agents, instructions, skills, hooks, workflows, and plugins to supercharge your GitHub Copilot experience.

Get the whole plugin

Other skills on awesome-copilot.