csharp-async
Original:🇺🇸 English
Translated
Get best practices for C# async programming
5installs
Sourcegithub/awesome-copilot
Added on
NPX Install
npx skill4agent add github/awesome-copilot csharp-asyncTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →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., for
GetDataAsync())GetData()
Return Types
- Return when the method returns a value
Task<T> - Return when the method doesn't return a value
Task - Consider for high-performance scenarios to reduce allocations
ValueTask<T> - Avoid returning for async methods except for event handlers
void
Exception Handling
- Use try/catch blocks around await expressions
- Avoid swallowing exceptions in async methods
- Use when appropriate to prevent deadlocks in library code
ConfigureAwait(false) - Propagate exceptions with instead of throwing in async Task returning methods
Task.FromException()
Performance
- Use for parallel execution of multiple tasks
Task.WhenAll() - Use for implementing timeouts or taking the first completed task
Task.WhenAny() - Avoid unnecessary async/await when simply passing through task results
- Consider cancellation tokens for long-running operations
Common Pitfalls
- Never use ,
.Wait(), or.Resultin async code.GetAwaiter().GetResult() - 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.