0Pricing
C# Academy · Aula

Armadilhas assíncronas: sync-over-async e deadlocks

Identifique armadilhas assíncronas, como sync-over-async e deadlocks. Aprenda por que chamadas bloqueantes podem congelar aplicativos e como evitar armadilhas comuns.

Armadilhas assíncronas: sync-over-async e deadlocks é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

Visão geral das armadilhas

Armadilhas: async facilita a programação, mas misturar código síncrono e assíncrono pode congelar aplicativos ou causar impasses.

Síncrono sobre assíncrono

Chamar .Result em uma Task bloqueia o encadeamento. Em aplicativos de console, isso pode funcionar, mas em contextos de UI/ASP.NET há risco de impasse.

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);
  }
}

Conclusão mais segura

Em demonstrações de console, é possível bloquear com cuidado. Em aplicativos reais, prefira async em toda a cadeia: marque os métodos como async e use await, não .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 do impasse

Cadeia do impasse:

  • O encadeamento é bloqueado em Task.Result
  • A continuação precisa desse mesmo encadeamento
  • A continuação nunca é executada
  • O resultado nunca chega — ocorre um impasse

Problema de Wait()

.Wait() é outra chamada que pode bloquear e causar os mesmos 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");
  }
}

Boas práticas

Diretrizes:

  • Evite misturar código síncrono e assíncrono
  • Use async/await em toda a pilha de chamadas
  • Bloqueie apenas em aplicativos de console de demonstração
  • Em aplicativos de UI ou web, nunca chame .Result ou .Wait()

Risco de impasse com Result

Verificação rápida: por que chamar .Result em uma Task async é perigoso em contextos de UI ou ASP.NET?

Recapitulação

Recapitulação: bloquear Tasks assíncronas com .Result ou .Wait() pode causar impasses. Prefira async/await em toda a cadeia.

Perguntas Frequentes

A aula “Armadilhas assíncronas: sync-over-async e deadlocks” é grátis?

Sim — o texto completo de “Armadilhas assíncronas: sync-over-async e deadlocks” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “Armadilhas assíncronas: sync-over-async e deadlocks”?

Identifique armadilhas assíncronas, como sync-over-async e deadlocks. Aprenda por que chamadas bloqueantes podem congelar aplicativos e como evitar armadilhas comuns. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 3.

Quanto tempo leva a aula “Armadilhas assíncronas: sync-over-async e deadlocks”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Task/ValueTask e a máquina de estados assíncrona (conceitos)
  2. Armadilhas assíncronas: sync-over-async e deadlocks
  3. ConfigureAwait, fluxo de exceções
← Voltar para C# Academy