What problem does it solve? Writing correct async Rust code is difficult: 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 each of these problems. ## Core Features & Use Cases - Concurrent Task Execution: Spawn and manage tasks with JoinSet, limit concurrency with buffer_unordered, and race futures with tokio::select!. - Channels & Communication: Choose between mpsc, broadcast, oneshot, and watch channels with working code examples for each. - Error Handling & Shutdown: Combine thiserror and anyhow for typed errors, wrap operations in timeouts, and implement graceful shutdown with CancellationToken or broadcast signals. - Use Case: When building a network service that must handle thousands of concurrent connections, apply the semaphore-based connection pool and RwLock cache patterns to manage shared state safely. ## Quick Start Ask the assistant to show how to run multiple async HTTP requests concurrently in Rust with a concurrency limit and proper error handling using Tokio.