Use when Rust async programming with tokio, async/await, and futures. Use when writing asynchronous Rust code.
View on GitHubTheBushidoCollective/han
jutsu-rust
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/jutsu/jutsu-rust/skills/rust-async-patterns/SKILL.md -a claude-code --skill rust-async-patternsInstallation paths:
.claude/skills/rust-async-patterns/# Rust Async Patterns
Master asynchronous programming in Rust using async/await syntax, tokio
runtime, and the futures ecosystem for concurrent I/O operations.
## Async/Await Basics
**Basic async function:**
```rust
async fn fetch_data() -> String {
String::from("data")
}
#[tokio::main]
async fn main() {
let data = fetch_data().await;
println!("{}", data);
}
```
**Cargo.toml setup:**
```toml
[dependencies]
tokio = { version = "1", features = ["full"] }
```
## Tokio Runtime
**Different runtime configurations:**
```rust
// Multi-threaded runtime (default)
#[tokio::main]
async fn main() {
// Code here
}
// Single-threaded runtime
#[tokio::main(flavor = "current_thread")]
async fn main() {
// Code here
}
// Manual runtime creation
use tokio::runtime::Runtime;
fn main() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
println!("Running async code");
});
}
```
## Spawning Tasks
**Creating concurrent tasks:**
```rust
use tokio::task;
#[tokio::main]
async fn main() {
let task1 = task::spawn(async {
println!("Task 1");
42
});
let task2 = task::spawn(async {
println!("Task 2");
100
});
let result1 = task1.await.unwrap();
let result2 = task2.await.unwrap();
println!("Results: {}, {}", result1, result2);
}
```
**Spawning with move:**
```rust
#[tokio::main]
async fn main() {
let data = String::from("hello");
let handle = task::spawn(async move {
println!("{}", data);
});
handle.await.unwrap();
}
```
## Async HTTP with reqwest
**Install reqwest:**
```toml
[dependencies]
reqwest = { version = "0.11", features = ["json"] }
serde = { version = "1.0", features = ["derive"] }
```
**Making HTTP requests:**
```rust
use reqwest;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let response = reqwest::get("https://api.github.com/users/rust-lang")
.await?
.text()
.await?;
println!("{}"