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.
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
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).
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
- Task/ValueTask e a máquina de estados assíncrona (conceitos)
- Armadilhas assíncronas: sync-over-async e deadlocks
- ConfigureAwait, fluxo de exceções