rust-async-patterns
Dominando los Patrones de Programación Asíncrona en Rust
También disponible en: wshobson
Crear aplicaciones asíncronas en Rust requiere comprender patrones complejos de concurrencia. Esta habilidad proporciona patrones Tokio listos para producción para tareas, canales, streams y manejo de apagado elegante.
Descargar el ZIP de la skill
Subir en Claude
Ve a Configuración → Capacidades → Skills → Subir skill
Activa y empieza a usar
Pruébalo
Usando "rust-async-patterns". Crear una función asíncrona que obtenga datos de 5 URLs con un límite de concurrencia de 3
Resultado esperado:
Usa stream::iter con buffer_unordered(3) para procesar URLs de forma concurrente, retornando un Vec de Results con manejo de errores apropiado para cada operación de fetch.
Usando "rust-async-patterns". ¿Cómo comparto estado entre tareas asíncronas de forma segura?
Resultado esperado:
Recomienda Arc<RwLock<T>> para cargas de trabajo con muchas lecturas o Arc<Mutex<T>> para escenarios con muchas escrituras, con ejemplos que muestran los patrones .read().await y .write().await.
Auditoría de seguridad
SeguroAll 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.
Puntuación de calidad
Lo que puedes crear
Desarrollo de Servicios de Red
Construir servidores HTTP concurrentes o manejadores WebSocket usando tareas y canales Tokio para distribución de requests y apagado elegante.
Implementación de Pipeline de Datos
Procesar datos en streaming con streams asíncronos, buffer_unordered para concurrencia controlada y propagación adecuada de errores.
Depuración de Código Asíncrono
Diagnosticar problemas de deadlock, entender cancelación de tareas e implementar instrumentación de tracing apropiada para aplicaciones asíncronas.
Prueba estos prompts
Ayúdame a configurar una aplicación Tokio asíncrona básica con manejo de errores apropiado. Necesito obtener datos de múltiples URLs de forma concurrente y manejar cualquier fallo de manera elegante.
Necesito implementar un patrón de pool de trabajadores donde múltiples tareas productoras envían elementos de trabajo a tareas consumidoras. Muéstrame cómo usar canales mpsc con manejo de apagado apropiado.
Mi servidor asíncrono necesita manejar SIGINT/SIGTERM y apagarse de forma limpia. Todas las requests en vuelo deben completarse en 30 segundos antes de la terminación forzada. Implementa esto con CancellationToken.
Estoy procesando un gran dataset como stream. Implementa procesamiento por chunks con buffer_unordered para limitar la concurrencia a 10 elementos, con manejo de errores apropiado para elementos que fallen.
Mejores prácticas
- Usa tokio::select! para carreras de futures e implementar puntos de cancelación en tareas de larga duración
- Prefiere canales sobre estado compartido para comunicación entre tareas para evitar deadlocks y reducir contención de bloqueos
- Instrumenta funciones asíncronas con atributos de tracing y respeta CancellationToken para apagado elegante
Evitar
- Bloquear código asíncrono con std::thread::sleep o operaciones de I/O bloqueantes que agotan el runtime
- Mantener bloqueos a través de puntos await que pueden causar deadlocks cuando múltiples tareas compiten por los mismos bloqueos
- Crear tareas ilimitadas sin límites de semáforo o JoinSet llevando al agotamiento de recursos
Preguntas frecuentes
¿Cuál es la diferencia entre tokio::spawn y std::thread::spawn?
¿Cuándo debo usar canales vs estado compartido (Mutex/RwLock)?
¿Cómo manejo timeouts en Rust asíncrono?
¿Cuál es el propósito del crate async-trait?
¿Cómo puedo depurar aplicaciones Rust asíncronas?
¿Qué es buffer_unordered y cuándo debo usarlo?
Detalles del desarrollador
Autor
sickn33Licencia
MIT
Repositorio
https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/rust-async-patternsRef.
main
Estructura de archivos