技能 rust-async-patterns
📦

rust-async-patterns

安全

إتقان أنماط البرمجة غير المتزامنة في Rust

也可從以下取得: wshobson

يتطلب بناء تطبيقات Rust غير المتزامنة فهم أنماط التزامن المعقدة. توفر هذه المهارة أنماط Tokio الجاهزة للإنتاج للمهام والقنوات والبث والتعامل مع الإغلاق السلس.

支援: Claude Codex Code(CC)
🥉 72 青銅
1

下載技能 ZIP

2

在 Claude 中上傳

前往 設定 → 功能 → 技能 → 上傳技能

3

開啟並開始使用

測試它

正在使用「rust-async-patterns」。 إنشاء دالة async تجلب البيانات من 5 عناوين URL مع حد تزامن يبلغ 3

預期結果:

يستخدم stream::iter مع buffer_unordered(3) لمعالجة عناوين URL بشكل متزامن، مع إرجاع Vec من Results مع معالجة أخطاء مناسبة لكل عملية جلب.

正在使用「rust-async-patterns」。 كيف أشارك الحالة بين مهام async بأمان؟

預期結果:

يوصي باستخدام Arc<RwLock<T>> للأحمال الكثيفة القراءة أو Arc<Mutex<T>> للسيناريوهات الكثيفة الكتابة، مع أمثلة توضح أنماط .read().await و .write().await.

安全審計

安全
v1 • 2/24/2026

All 51 static analysis findings are false positives. The skill contains documentation-only markdown files with Rust code examples. The static analyzer incorrectly flagged: markdown code fence backticks as shell execution, tokio::spawn (async task spawning) as process execution, SQL queries as system reconnaissance, and example URLs as hardcoded secrets. No executable code or security risks present.

2
已掃描檔案
553
分析行數
0
發現項
1
審計總數
未發現安全問題
審計者: claude

品質評分

38
架構
100
可維護性
87
內容
31
社群
100
安全
100
規範符合性

你能建構什麼

تطوير خدمات الشبكة

بناء خوادم HTTP متزامنة أو معالجات WebSocket باستخدام مهام Tokio وقنوات لتوزيع الطلبات والإغلاق السلس.

تنفيذ خط أنابيب البيانات

معالجة البيانات المتدفقة باستخدام بث async و buffer_unordered للتحكم في التزامن، مع انتشار مناسب للأخطاء.

تصحيح أخطاء الكود غير المتزامن

تشخيص مشاكل الجمود، وفهم إلغاء المهام، وتنفيذ أدوات تتبع مناسبة لتطبيقات async.

試試這些提示

إعداد مهام Async أساسي
ساعدني في إعداد تطبيق Tokio async أساسي مع معالجة أخطاء مناسبة. أحتاج إلى جلب البيانات من عدة عناوين URL بشكل متزامن والتعامل مع أي إخفاقات بطريقة مرنة.
الاتصال المعتمد على القنوات
أحتاج إلى تنفيذ نمط مجموعة عمال حيث ترسل مهام المنتجين المتعددة عناصر العمل إلى مهام المستهلكين. أرني كيفية استخدام قنوات mpsc مع معالجة إغلاق مناسبة.
تنفيذ الإغلاق السلس
يحتاج الخادم غير المتزامن الخاص بي إلى معالجة SIGINT/SIGTERM والإغلاق بشكل نظيف. يجب أن تكتمل جميع الطلبات قيد التنفيذ خلال 30 ثانية قبل الإنهاء القسري. نفذ هذا باستخدام CancellationToken.
معالجة البث مع ضغط خلفي
أقوم بمعالجة مجموعة بيانات كبيرة كبث. نفذ معالجة مجزأة مع buffer_unordered للحد من التزامن إلى 10 عناصر، مع معالجة أخطاء مناسبة للعناصر الفاشلة.

最佳實務

  • استخدم tokio::select! لسباق العمليات المستقبلية وتنفيذ نقاط الإلغاء في المهام طويلة التشغيل
  • فضل القنوات على الحالة المشتركة لاتصال المهام لتجنب الجمود وتقليل تنافس القفل
  • زود دوال async بسمات tracing واحترم CancellationToken للإغلاق السلس

避免

  • حجب كود async باستخدام std::thread::sleep أو عمليات I/O الحاصرة التي تجوع بيئة التشغيل
  • الاحتفاظ بالأقفال عبر نقاط await مما قد يسبب جمودًا عندما يتنافس مهام متعددة على نفس الأقفال
  • إنشاء مهام غير محدودة بدون semaphores أو حدود JoinSet مما يؤدي إلى استنفاد الموارد

常見問題

ما الفرق بين tokio::spawn و std::thread::spawn؟
ينشئ tokio::spawn مهام async خفيفة الوزن يتم جدولتها بواسطة بيئة تشغيل Tokio، بينما ينشئ std::thread::spawn مؤشرات ترابط OS. مهام Tokio أرخص ويمكن إلغاؤها، لكنها تتطلب صيغة async/await.
متى يجب استخدام القنوات مقابل الحالة المشتركة (Mutex/RwLock)؟
استخدم القنوات لتمرير الرسائل بين المهام لتجنب تنافس القفل والجمود. استخدم الحالة المشتركة عندما تحتاج المهام إلى وصول حقيقي للذاكرة المشتركة أو للتخزين المؤقت للبيانات كثيرة القراءة.
كيف أتعامل مع انتهاء المهلة في Rust غير المتزامن؟
استخدم tokio::time::timeout() لتغليف العمليات المستقبلية بمدة زمنية. يعيد Result<Result<T, InnerError>, Elapsed> حيث يشير Elapsed إلى تجاوز مهلة الوقت.
ما الغرض من crate async-trait؟
لا تدعم Rust بشكل أصلي async fn في السمات. توفر crate async-trait ماكرو إجرائيًا يحول دوال السمات غير المتزامنة إلى عمليات مستقبلية معبوأة، مما يتيح تعدد الأشكال غير المتزامن.
كيف يمكنني تصحيح أخطاء تطبيقات Rust غير المتزامنة؟
استخدم tokio-console مع RUSTFLAGS='--cfg tokio_unstable' لمراقبة المهام أثناء وقت التشغيل. أضف نطاقات tracing مع #[instrument] واستخدم tracing-subscriber للتسجيل المنظم.
ما هو buffer_unordered ومتى يجب استخدامه؟
يحد buffer_unordered(n) من المعالجة المتزامنة لعناصر البث إلى n في كل مرة. استخدمه لمنع استنفاد الموارد عند معالجة العديد من العناصر بشكل متزامن، مثل مكالمات API محدودة المعدل.