Tokio评审
tokio-async-code-review
by anderskev
Reviews tokio async runtime usage for task management, sync primitives, channel patterns, and runtime configuration. Use when reviewing Rust code that uses tokio, async/await patterns, spawn, channels, or async synchronization. Also covers tokio-util, tower, and hyper integration patterns.
安装
claude skill add --url github.com/openclaw/skills/tree/main/skills/anderskev/tokio-async-code-review文档
Tokio Async Code Review
Review Workflow
- Check Cargo.toml — Note tokio feature flags (
full,rt-multi-thread,macros,sync, etc.). Missing features cause confusing compile errors. - Check runtime setup — Is
#[tokio::main]or manual runtime construction used? Multi-thread vs current-thread? - Scan for blocking — Search for
std::fs,std::net,std::thread::sleep, CPU-heavy loops in async functions. - Check channel usage — Match channel type to communication pattern (mpsc, broadcast, oneshot, watch).
- Check sync primitives — Verify correct mutex type, proper guard lifetimes, no deadlock potential.
Output Format
Report findings as:
[FILE:LINE] ISSUE_TITLE
Severity: Critical | Major | Minor | Informational
Description of the issue and why it matters.
Quick Reference
| Issue Type | Reference |
|---|---|
| Task spawning, JoinHandle, structured concurrency | references/task-management.md |
| Mutex, RwLock, Semaphore, Notify, Barrier | references/sync-primitives.md |
| mpsc, broadcast, oneshot, watch channel patterns | references/channels.md |
Review Checklist
Runtime Configuration
- Tokio features in Cargo.toml match actual usage
- Runtime flavor matches workload (
multi_threadfor I/O-bound,current_threadfor simpler cases) -
#[tokio::test]used for async tests (not manual runtime construction) - Worker thread count configured appropriately for production
Task Management
-
spawnreturn values (JoinHandle) are tracked, not silently dropped -
spawn_blockingused for CPU-heavy or synchronous I/O operations - Tasks respect cancellation (via
CancellationToken,select!, or shutdown channels) -
JoinError(task panic or cancellation) is handled, not just unwrapped -
tokio::select!branches are cancellation-safe
Sync Primitives
-
tokio::sync::Mutexused when lock is held across.await;std::sync::Mutexfor short non-async sections - No mutex guard held across await points (deadlock risk)
-
Semaphoreused for limiting concurrent operations (not ad-hoc counters) -
RwLockused when read-heavy workload (many readers, infrequent writes) -
Notifyused for simple signaling (not channel overhead)
Channels
- Channel type matches pattern: mpsc for back-pressure, broadcast for fan-out, oneshot for request-response, watch for latest-value
- Bounded channels have appropriate capacity (not too small = deadlock, not too large = memory)
-
SendError/RecvErrorhandled (indicates other side dropped) - Broadcast
Laggederrors handled (receiver fell behind) - Channel senders dropped when done to signal completion to receivers
Timer and Sleep
-
tokio::time::sleepused instead ofstd::thread::sleep -
tokio::time::timeoutwraps operations that could hang -
tokio::time::intervalused correctly (.tick().awaitfor periodic work)
Severity Calibration
Critical
- Blocking I/O (
std::fs::read,std::net::TcpStream) in async context withoutspawn_blocking - Mutex guard held across
.awaitpoint (deadlock potential) std::thread::sleepin async function (blocks runtime thread)- Unbounded channel where back-pressure is needed (OOM risk)
Major
JoinHandlesilently dropped (lost errors, zombie tasks)- Missing
select!cancellation safety consideration - Wrong mutex type (std vs tokio) for the use case
- Missing timeout on network/external operations
Minor
tokio::spawnfor trivially small async blocks (overhead > benefit)- Overly large channel buffer without justification
- Manual runtime construction where
#[tokio::main]suffices std::sync::Mutexwhere contention is high enough to benefit from tokio's async mutex
Informational
- Suggestions to use
tokio-utilutilities (e.g.,CancellationToken) - Tower middleware patterns for service composition
- Structured concurrency with
JoinSet
Valid Patterns (Do NOT Flag)
std::sync::Mutexfor short critical sections — tokio docs recommend this when no.awaitis inside the locktokio::spawnwithout explicit join — Valid for background tasks with proper shutdown signaling- Unbuffered channel capacity of 1 — Valid for synchronization barriers
#[tokio::main(flavor = "current_thread")]in simple binaries — Not every app needs multi-thread runtimeclone()onArc<T>beforespawn— Required for moving into tasks, not unnecessary cloning- Large broadcast channel capacity — Valid when lagged errors are expensive (event sourcing)
Before Submitting Findings
Load and follow beagle-rust:review-verification-protocol before reporting any issue.
相关 Skills
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
相关 MCP 服务
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。