
Async/await & Patterns
async/await, Task, ValueTask, ConfigureAwait, cancellation tokens, ejecución paralela, deadlocks
1¿Cuál es el rol principal de la palabra clave 'await' en un método asíncrono?
¿Cuál es el rol principal de la palabra clave 'await' en un método asíncrono?
Respuesta
La palabra clave await suspende la ejecución del método asíncrono hasta que la Task se complete, liberando al mismo tiempo el thread que llama para que pueda procesar otras tareas. Esto evita el bloqueo del thread y mejora la escalabilidad de la aplicación. A diferencia de Task.Wait() o Task.Result que bloquean el thread, await permite un uso eficiente de los recursos del thread pool.
2¿Por qué se debe evitar async void excepto para los manejadores de eventos?
¿Por qué se debe evitar async void excepto para los manejadores de eventos?
Respuesta
Los métodos async void no se pueden esperar (await) y las excepciones lanzadas dentro no pueden ser capturadas por el código que llama, provocando un crash de la aplicación. Además, es imposible hacer pruebas unitarias de un método async void porque no hay ninguna Task que esperar. Los manejadores de eventos son la excepción porque son invocados por el framework y no pueden retornar Task.
3¿En qué caso de uso se debe preferir ValueTask<T> en lugar de Task<T>?
¿En qué caso de uso se debe preferir ValueTask<T> en lugar de Task<T>?
Respuesta
ValueTask es un value type que evita la asignación en el heap cuando el resultado ya está disponible de manera síncrona, como en un cache. Esto reduce la presión sobre el garbage collector en escenarios de alto rendimiento. Task siempre se asigna en el heap incluso si el resultado es síncrono. Usa ValueTask únicamente cuando las ganancias de rendimiento sean medibles, ya que su uso incorrecto puede degradar el rendimiento.
¿Qué restricción importante se aplica a ValueTask<T> en comparación con Task<T>?
¿Cuál es el objetivo principal de ConfigureAwait(false) en una biblioteca .NET?
+23 preguntas de entrevista
Otros temas de entrevista .NET
Fundamentos de C#
LINQ & Delegates
Fundamentos del lenguaje C#
Fundamentos de ASP.NET Core
Ciclo de vida de las solicitudes en ASP.NET Core
Configuration & Settings
Ciclo de vida de la aplicación
Dependency Injection
Entity Framework Core
Minimal APIs
Desarrollo de Web API
Async en ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Serialización JSON
Entity Framework Core avanzado
Características avanzadas de C#
Clean Architecture
Logging, Monitoring & Observability
Pruebas unitarias y xUnit
Pruebas de integración
Docker & Containerization
NuGet Package Management
Memory Management & GC
Programación reactiva
.NET Design Patterns
Optimización del rendimiento
Seguridad y Best Practices
SignalR y tiempo real
Arquitectura de Microservicios
Domina .NET para tu próxima entrevista
Accede a todas las preguntas, flashcards, tests técnicos, ejercicios de code review y simuladores de entrevista.
Empieza gratis