What problem does it solve? Choosing the wrong concurrency primitive in .NET leads to race conditions, deadlocks, and over-engineered code. This Skill provides a decision framework for picking the right abstraction—async/await, Parallel.ForEachAsync, Channels, Reactive Extensions, Akka.NET Streams, or Akka.NET Actors—based on the actual concurrency problem. ## Core Features & Use Cases - Decision Tree: Maps common scenarios (I/O waits, CPU-bound parallelism, producer/consumer queues, state machines) to the appropriate .NET concurrency tool. - Escalation Path Guidance: Enforces a start-simple philosophy, escalating from async/await to Channels or actors only when a concrete need exists. - Synchronization Primitives Reference: Compares lock, SemaphoreSlim, Interlocked, ConcurrentDictionary, ReaderWriterLockSlim, and SpinLock with usage rules and anti-patterns. - Use Case: When building a background order-processing service, use the Skill to decide between a bounded Channel worker pool and Akka.NET actors, then apply the provided code patterns directly. ## Quick Start Ask the AI which .NET concurrency approach fits your scenario, such as processing a queue of orders with backpressure, and apply the recommended pattern.