All skills
wshobson avatar

/rust-async-patterns

@be57c0b
by Seth Hobsonwshobson/agents40k stars
4,281

Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns. Use when building async Rust applications, implementing concurrent systems, or debugging async code.

Use this Skill: https://skilld.dev/gh/wshobson/agents/rust-async-patterns

This session only. Nothing lands on disk.

SKILL.md

≈55 tokens always: the name and description. ≈608 when used: this file. ≈2.5k more on demand in 1 file.

Rust Async Patterns

Production patterns for async Rust programming with Tokio runtime, including tasks, channels, streams, and error handling.

When to Use This Skill

  • Building async Rust applications
  • Implementing concurrent network services
  • Using Tokio for async I/O
  • Handling async errors properly
  • Debugging async code issues
  • Optimizing async performance

Core Concepts

1. Async Execution Model

Future (lazy) → poll() → Ready(value) | Pending
                ↑           ↓
              Waker ← Runtime schedules

2. Key Abstractions

Concept Purpose
Future Lazy computation that may complete later
async fn Function returning impl Future
await Suspend until future completes
Task Spawned future running concurrently
Runtime Executor that polls futures

Quick Start

# Cargo.toml
[dependencies]
tokio = { version = "1", features = ["full"] }
futures = "0.3"
async-trait = "0.1"
anyhow = "1.0"
tracing = "0.1"
tracing-subscriber = "0.3"
use tokio::time::{sleep, Duration};
use anyhow::Result;

#[tokio::main]
async fn main() -> Result<()> {
    // Initialize tracing
    tracing_subscriber::fmt::init();

    // Async operations
    let result = fetch_data("https://api.example.com").await?;
    println!("Got: {}", result);

    Ok(())
}

async fn fetch_data(url: &str) -> Result<String> {
    // Simulated async operation
    sleep(Duration::from_millis(100)).await;
    Ok(format!("Data from {}", url))
}

Detailed patterns and worked examples

Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.

Best Practices

Do's

  • Use tokio::select! - For racing futures
  • Prefer channels - Over shared state when possible
  • Use JoinSet - For managing multiple tasks
  • Instrument with tracing - For debugging async code
  • Handle cancellation - Check CancellationToken

Don'ts

  • Don't block - Never use std::thread::sleep in async
  • Don't hold locks across awaits - Causes deadlocks
  • Don't spawn unboundedly - Use semaphores for limits
  • Don't ignore errors - Propagate with ? or log
  • Don't forget Send bounds - For spawned futures

Source: SKILL.md on GitHub

No alerts16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    This skill provides educational patterns and code examples for asynchronous programming in Rust using the Tokio runtime. No security risks were identified.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    1 file scanned · No issues

  • ZeroLeaks5mo

    1 finding · Score: 82/100

Signed by skilld at be57c0b. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 4 months ago
  • Rust
  • tokio
  • async
  • concurrency
  • futures
  • channels
  • error-handling
  • tracing

README badge

README badge for wshobson/agents/rust-async-patterns

Teaches Tokio-based async Rust patterns including task spawning, channels, streams, and error handling for concurrent applications. Use when building async network services, implementing concurrent systems, or debugging async code in Rust.

Generated from the current SKILL.md.

Does this skill cover Tokio specifically?
Yes. The skill focuses on Tokio runtime patterns, including tasks, channels, streams, and the async execution model. It assumes Tokio 1.x as the primary async runtime.
What error handling approach does this skill teach?
The skill uses the `anyhow` crate for error propagation and emphasizes proper error handling in async contexts, including cancellation and timeout scenarios.
Does this cover async traits?
Yes. The skill includes `async-trait` patterns for defining async trait methods, which is necessary for async abstractions in Rust.
Will this help me debug async code?
Yes. The skill covers tracing instrumentation for debugging async code and includes patterns for understanding the async execution model and task scheduling.
Does this skill address common async pitfalls?
Yes. It includes a 'Don'ts' section covering blocking in async contexts, lock usage across awaits, unbounded spawning, error handling, and Send trait bounds.

Generated from the current SKILL.md. These answers refresh after source changes.