0Pricing
C# Academy · Lección

Task/ValueTask y la máquina de estados async (conceptos)

Comprenda los resultados de Task y la idea de la máquina de estados async. Escriba métodos async pequeños, componga awaits y observe un TaskCompletionSource manual.

Task/ValueTask y la máquina de estados async (conceptos) es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 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.

Modelo mental

Objetivo: Desarrolle una intuición sobre la asincronía.

  • Task representa un trabajo en curso y un resultado futuro
  • await pausa la ejecución y la reanuda más tarde
  • El compilador crea una máquina de estados
  • ValueTask: una optimización más reciente (solo se presenta el concepto)

Conceptos básicos de los métodos async

Un método async devuelve Task<T> inmediatamente; después se completa con el valor cuando finaliza el trabajo esperado.

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

Composición de operaciones await

await permite escribir pasos asíncronos secuenciales con un estilo claro, de arriba abajo.

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

Idea de la máquina de estados

Concepto: El compilador transforma un método async en una máquina de estados.

  • Las variables locales se almacenan como campos
  • Cada await produce un estado nuevo
  • Cuando se completa el Task esperado, una continuación reanuda el método
  • Las excepciones se capturan y se asignan al Task

Demostración de TaskCompletionSource

TaskCompletionSource permite crear un Task y señalar su finalización más tarde; await lo consume como cualquier otro 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);
  }
}

Concepto de ValueTask

ValueTask (concepto): un tipo de retorno más reciente que ahorra asignaciones para resultados que suelen estar disponibles de forma síncrona.

  • Resulta útil cuando los resultados ya están disponibles la mayor parte del tiempo
  • Tiene reglas para evitar asignaciones adicionales
  • No está disponible en C# 6; use Task aquí, aunque las ideas sigan siendo aplicables

Máquina de estados asíncrona

Comprobación rápida: ¿Qué genera el compilador de C# para un método async que usa await?

Resumen

Resumen: Task representa el trabajo; await pausa y reanuda la ejecución; el compilador construye una máquina de estados. ValueTask es un concepto de optimización (use Task en C# 6).

Preguntas frecuentes

¿La lección «Task/ValueTask y la máquina de estados async (conceptos)» es gratis?

Sí — el texto completo de «Task/ValueTask y la máquina de estados async (conceptos)» 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 «Task/ValueTask y la máquina de estados async (conceptos)»?

Comprenda los resultados de Task y la idea de la máquina de estados async. Escriba métodos async pequeños, componga awaits y observe un TaskCompletionSource manual. 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 1 de 3.

¿Cuánto tiempo toma la lección «Task/ValueTask y la máquina de estados async (conceptos)»?

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