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
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
- Task/ValueTask und die asynchrone Zustandsmaschine (Konzepte)
- Async-Fallstricke: Sync-over-Async und Deadlocks
- ConfigureAwait und Ausnahmefluss