0Pricing
C# Academy · Lektion

Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)

Verstehen Sie Task-Ergebnisse und das Konzept der asynchronen Zustandsmaschine. Schreiben Sie kleine asynchrone Methoden, kombinieren Sie awaits und sehen Sie eine manuelle TaskCompletionSource.

Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte) ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Mentales Modell

Ziel: Eine intuitive Vorstellung von Async entwickeln.

  • Task stellt laufende Arbeit und ein künftiges Ergebnis dar
  • await hält an und setzt später fort
  • Der Compiler erstellt einen Zustandsautomaten
  • ValueTask: eine neuere Optimierung (hier nur als Konzept)

Grundlagen asynchroner Methoden

Eine async-Methode gibt sofort ein Task<T> zurück; später wird sie mit dem Wert abgeschlossen, sobald die Arbeit, auf die gewartet wird, beendet ist.

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

Await-Aufrufe kombinieren

await ermöglicht es, aufeinanderfolgende asynchrone Schritte in einem klaren Stil von oben nach unten zu schreiben.

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

Idee des Zustandsautomaten

Konzept: Der Compiler wandelt eine asynchrone Methode in einen Zustandsautomaten um.

  • Lokale Variablen werden als Felder gespeichert
  • Jedes await führt zu einem neuen Zustand
  • Wenn der erwartete Task abgeschlossen ist, setzt eine Fortsetzung die Methode fort
  • Ausnahmen werden erfasst und im Task hinterlegt

TaskCompletionSource-Demo

Mit TaskCompletionSource können Sie einen Task erstellen und dessen Abschluss später signalisieren; await verwendet ihn wie jeden anderen 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);
  }
}

ValueTask-Konzept

ValueTask (Konzept): ein neuerer, speichersparender Rückgabetyp für Ergebnisse, die häufig synchron vorliegen.

  • Nützlich, wenn Ergebnisse meistens bereits verfügbar sind
  • Verfügt über Regeln, die zusätzliche Allokationen vermeiden
  • In C# 6 nicht verfügbar – verwenden Sie hier Task; die Ideen gelten trotzdem

Asynchroner Zustandsautomat

Kurze Überprüfung: Was erzeugt der C#-Compiler für eine asynchrone Methode, die await verwendet?

Zusammenfassung

Zusammenfassung: Task modelliert Arbeit; await hält an und setzt fort; der Compiler erstellt einen Zustandsautomaten. ValueTask ist ein Optimierungskonzept (verwenden Sie in C# 6 Task).

Häufig gestellte Fragen

Ist die Lektion „Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)“ kostenlos?

Ja — der vollständige Text von „Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)“?

Verstehen Sie Task-Ergebnisse und das Konzept der asynchronen Zustandsmaschine. Schreiben Sie kleine asynchrone Methoden, kombinieren Sie awaits und sehen Sie eine manuelle TaskCompletionSource. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)
  2. Async-Fallstricke: Sync-over-Async und Deadlocks
  3. ConfigureAwait und Ausnahmefluss
← Zurück zu C# Academy