0Pricing
C# Academy · Lección

Errores comunes de async: sync-over-async y deadlocks

Identifique errores comunes de async, como sync-over-async y los deadlocks. Aprenda por qué las llamadas bloqueantes pueden congelar las aplicaciones y cómo evitar estas trampas habituales.

Errores comunes de async: sync-over-async y deadlocks es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.

Resumen de errores frecuentes

Errores frecuentes: La asincronía facilita la programación, pero mezclar código síncrono y asíncrono puede congelar aplicaciones o provocar interbloqueos.

Código síncrono sobre asíncrono

Llamar a .Result en un Task bloquea el subproceso. En aplicaciones de consola puede funcionar, pero en contextos de UI/ASP.NET existe riesgo de interbloqueo.

using System;
using System.Threading.Tasks;

public class Program
{
  static async Task<string> SayHelloAsync()
  {
    await Task.Delay(200); // simulate async delay
    return "Hello";
  }

  public static void Main(string[] args)
  {
    // BAD: calling .Result blocks the thread
    string msg = SayHelloAsync().Result;
    Console.WriteLine(msg);
  }
}

Finalización más segura

En demostraciones de consola puede bloquear con cuidado. En aplicaciones reales, prefiera async en toda la cadena de llamadas: marque los métodos como async y use await, no .Result.

using System;
using System.Threading.Tasks;

public class Program
{
  static async Task<string> SayHelloAsync()
  {
    await Task.Delay(200);
    return "Hello async";
  }

  public static void Main(string[] args)
  {
    // In C# 6, Main is sync; avoid blocking in real apps
    string msg = SayHelloAsync().GetAwaiter().GetResult(); // safer than .Result
    Console.WriteLine(msg);
  }
}

Mecanismo del interbloqueo

Cadena del interbloqueo:

  • El subproceso se bloquea en Task.Result
  • La continuación necesita ese mismo subproceso
  • La continuación nunca se ejecuta
  • El resultado nunca llega — se produce un interbloqueo

Problema de Wait()

.Wait() es otra llamada bloqueante que puede causar los mismos problemas que .Result.

using System;
using System.Threading.Tasks;

public class Program
{
  static async Task<string> WorkAsync()
  {
    await Task.Delay(100);
    return "done";
  }

  public static void Main(string[] args)
  {
    // BAD: Wait() can also deadlock in UI/ASP.NET
    WorkAsync().Wait();
    Console.WriteLine("Completed");
  }
}

Prácticas recomendadas

Directrices:

  • Evite mezclar código síncrono y asíncrono
  • Use async/await en toda la pila de llamadas
  • Bloquee solo en aplicaciones de consola de demostración
  • En aplicaciones de UI o web, nunca llame a .Result ni a .Wait()

Riesgo de interbloqueo con Result

Comprobación rápida: ¿Por qué es peligroso llamar a .Result en un Task async en contextos de UI o ASP.NET?

Resumen

Resumen: Bloquear Tasks asíncronos con .Result o .Wait() puede provocar interbloqueos. Prefiera async/await en toda la cadena de llamadas.

Preguntas frecuentes

¿La lección «Errores comunes de async: sync-over-async y deadlocks» es gratis?

Sí — el texto completo de «Errores comunes de async: sync-over-async y deadlocks» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Errores comunes de async: sync-over-async y deadlocks»?

Identifique errores comunes de async, como sync-over-async y los deadlocks. Aprenda por qué las llamadas bloqueantes pueden congelar las aplicaciones y cómo evitar estas trampas habituales. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «Errores comunes de async: sync-over-async y deadlocks»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Task/ValueTask y la máquina de estados async (conceptos)
  2. Errores comunes de async: sync-over-async y deadlocks
  3. ConfigureAwait y flujo de excepciones
← Volver a C# Academy