C# Academy · Aula

Task/ValueTask e a máquina de estados assíncrona (conceitos)

Entenda os resultados de Task e a ideia da máquina de estados assíncrona. Escreva pequenos métodos assíncronos, componha await e veja um TaskCompletionSource manual.

Aula 1 de 38 etapas

Task/ValueTask e a máquina de estados assíncrona (conceitos) é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 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.

Modelo mental

Objetivo: desenvolver uma intuição sobre async.

  • Task representa um trabalho em andamento e um resultado futuro
  • await pausa e retoma posteriormente
  • O compilador cria uma máquina de estados
  • ValueTask: uma otimização mais recente (apenas o conceito é apresentado aqui)

Noções básicas de métodos async

Um método async retorna Task<T> imediatamente; depois, é concluído com o valor quando o trabalho aguardado termina.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  // Tiny async method: returns Task<int>
  static async Task<int> GetAnswerAsync()
  {
    // Offload simple work to a thread-pool task (demo only)
    int value = await Task.Run(() =>
    {
      Thread.Sleep(200); // simulate work
      return 42;
    });
    return value; // completes Task<int>
  }

  public static void Main(string[] args)
  {
    // In C# 6, Main cannot be async; block just for demo (console apps are safe here)
    int result = GetAnswerAsync().Result;
    Console.WriteLine("Answer = " + result);
  }
}

Composição de operações await

await permite escrever etapas assíncronas sequenciais com um estilo claro, de cima para baixo.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task<int> Step1Async()
  {
    // pretend I/O
    await Task.Delay(100);
    return 10;
  }

  static async Task<int> Step2Async(int x)
  {
    await Task.Delay(100);
    return x * 3; // simple transform
  }

  static async Task<int> PipelineAsync()
  {
    int a = await Step1Async();   // await first
    int b = await Step2Async(a);  // then await second
    return a + b;                 // total 10 + 30 = 40
  }

  public static void Main(string[] args)
  {
    int total = PipelineAsync().Result; // block in demo
    Console.WriteLine("Total = " + total);
  }
}

Ideia da máquina de estados

Conceito: o compilador transforma um método async em uma máquina de estados.

  • As variáveis locais são armazenadas como campos
  • Cada await produz um novo estado
  • Quando a Task aguardada é concluída, uma continuação retoma o método
  • As exceções são capturadas e definidas na Task

Demonstração de TaskCompletionSource

TaskCompletionSource permite criar uma Task e sinalizar sua conclusão posteriormente; await a consome como qualquer outra Task.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  // Emulate an async source that completes later
  static Task<string> MakeTaskManually()
  {
    var tcs = new TaskCompletionSource<string>();
    // Complete on a worker after a short delay
    ThreadPool.QueueUserWorkItem(_ =>
    {
      Thread.Sleep(150);
      tcs.SetResult("done");
    });
    return tcs.Task;
  }

  static async Task<string> UseAsyncSource()
  {
    string s = await MakeTaskManually(); // await a Task you created
    return s.ToUpperInvariant();
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(UseAsyncSource().Result);
  }
}

Conceito de ValueTask

ValueTask (conceito): um tipo de retorno mais recente que economiza alocações para resultados frequentemente síncronos.

  • É útil quando os resultados já estão disponíveis na maior parte do tempo
  • Tem regras para evitar alocações extras
  • Não está disponível no C# 6 — use Task aqui; as ideias ainda se aplicam

Máquina de estados assíncrona

Verificação rápida: o que o compilador do C# gera para um método async que usa await?

Recapitulação

Recapitulação: Task representa o trabalho; await pausa e retoma; o compilador cria uma máquina de estados. ValueTask é um conceito de otimização (use Task no C# 6).

Grátis para começar

Aprenda C# com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
93
Aulas
346

Perguntas Frequentes

A aula “Task/ValueTask e a máquina de estados assíncrona (conceitos)” é grátis?

Sim — o texto completo de “Task/ValueTask e a máquina de estados assíncrona (conceitos)” é 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 “Task/ValueTask e a máquina de estados assíncrona (conceitos)”?

Entenda os resultados de Task e a ideia da máquina de estados assíncrona. Escreva pequenos métodos assíncronos, componha await e veja um TaskCompletionSource manual. 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 1 de 3.

Quanto tempo leva a aula “Task/ValueTask e a máquina de estados assíncrona (conceitos)”?

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