- Use `#[tokio::main]` for the async entry point and `tokio::spawn` for concurrent tasks.
- Use `tokio::fs`, `tokio::net`, `tokio::io` for async I/O instead of `std::fs`, `std::net`.
- Use `tokio::select!` for racing multiple async operations with cancellation.
- Use `tokio::sync` primitives (`Mutex`, `RwLock`, `mpsc`, `oneshot`) for async-safe synchronization.
- Avoid blocking operations in async context — use `tokio::task::spawn_blocking` for CPU-heavy work.
- Use `tokio::time::timeout` to wrap operations that might hang indefinitely.
- Use `tokio::signal` for graceful shutdown handling in servers.
- Prefer `tokio::sync::mpsc` channels over shared state for inter-task communication.
- Use `tokio::task::JoinSet` for managing groups of spawned tasks.