What problem does it solve? Writing correct async Rust code is challenging: developers struggle with task coordination, channel selection, error propagation across await points, graceful shutdown, and deadlocks from holding locks across awaits. This Skill provides production-tested patterns for the Tokio ecosystem so you avoid common pitfalls. ## Core Features & Use Cases - Concurrency Patterns: Spawn and manage tasks with JoinSet, limit concurrency with buffer_unordered, and race futures with tokio::select!. - Communication & State: Choose between mpsc, broadcast, oneshot, and watch channels, plus RwLock and Semaphore-based resource pooling. - Error Handling & Shutdown: Structure errors with thiserror/anyhow, add timeouts, and implement graceful shutdown via CancellationToken or broadcast signals. - Use Case: When building a network service that must handle thousands of concurrent connections, apply the JoinSet pattern for request fan-out, wrap calls in timeout helpers, and shut down cleanly on Ctrl-C. ## Quick Start Ask the assistant to show how to run multiple async HTTP requests concurrently in Rust with Tokio, with a concurrency limit and proper error handling.