mcpField
R
rust-async-patterns

rust-async-patterns

github.com/wshobson开发41.9k20.9k 次安装2 周前更新
代码仓库

关于 rust-async-patterns

面向 Rust 开发者的异步编程参考技能,聚焦 Tokio 运行时中的生产实践,涵盖任务、通道、流、错误处理与调试。

主要功能

  1. 01Tokio 异步执行模式
  2. 02任务、通道与流
  3. 03异步错误处理
  4. 04追踪与取消指导

适用场景

  1. 01构建 Rust 异步应用
  2. 02实现并发网络服务
  3. 03调试异步代码问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wshobson/agents --skill rust-async-patterns

安装后在 Claude Code 中输入/rust-async-patterns确认已加载。

附带文件references/details.md

详细介绍

Rust 异步模式

使用 Tokio 运行时进行异步 Rust 编程的生产级模式,包括任务、通道、流和错误处理。

何时使用本技能

  • 构建异步 Rust 应用
  • 实现并发网络服务
  • 使用 Tokio 进行异步 I/O
  • 正确处理异步错误
  • 调试异步代码问题
  • 优化异步性能

核心概念

1. 异步执行模型
Future (lazy) → poll() → Ready(value) | Pending
                ↑           ↓
              Waker ← Runtime schedules
2. 关键抽象
概念用途
Future可能稍后才完成的惰性计算
async fn返回 impl Future 的函数
await挂起,直到 future 完成
Task被派生并并发运行的 future
Runtime轮询 future 的执行器

快速开始

# 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))
}

详细模式与完整示例

详细的模式文档位于 references/details.md。当上述导航层级不够用时,请阅读该文件。

最佳实践

应该做的
  • 使用 tokio::select! - 用于竞速多个 future
  • 优先使用通道 - 尽可能替代共享状态
  • 使用 JoinSet - 用于管理多个任务
  • 用 tracing 进行插桩 - 用于调试异步代码
  • 处理取消 - 检查 CancellationToken
不应该做的
  • 不要阻塞 - 绝不要在异步中使用 std::thread::sleep
  • 不要在 await 之间持有锁 - 会导致死锁
  • 不要无限制地派生任务 - 使用信号量进行限制
  • 不要忽略错误 - 用 ? 传播或记录日志
  • 不要忘记 Send 约束 - 对于派生的 future

评论

支持 Markdown