Task/ValueTask en de async state machine (concepten)
Begrijp Task-resultaten en het idee van de async state machine. Schrijf kleine async-methoden, combineer awaits en bekijk een handmatige TaskCompletionSource.
Task/ValueTask en de async state machine (concepten) is een gratis C# Academy-les op CoddyKit. Dit is les 1 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 3 lessen.
Mentaal model
Doel: intuïtie voor async ontwikkelen.
- Task vertegenwoordigt lopend werk en een toekomstig resultaat
- await pauzeert en hervat later
- De compiler maakt een toestandsmachine
- ValueTask: nieuwere optimalisatie (hier alleen als concept)
Basisprincipes van async-methoden
Een async-methode retourneert onmiddellijk Task<T>; later wordt deze voltooid met de waarde zodra het werk waarop wordt gewacht klaar is.
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-aanroepen combineren
Met await kun je opeenvolgende async-stappen schrijven in een duidelijke stijl van boven naar beneden.
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 achter de toestandsmachine
Concept: de compiler zet een async-methode om in een toestandsmachine.
- Lokale variabelen worden opgeslagen als velden
- Elke await levert een nieuwe toestand op
- Wanneer de Task waarop wordt gewacht is voltooid, hervat een voortzetting de methode
- Uitzonderingen worden opgevangen en op de Task geplaatst
Demonstratie van TaskCompletionSource
Met TaskCompletionSource kun je een Task maken en de voltooiing ervan later signaleren; await gebruikt deze zoals elke andere 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);
}
}
Het ValueTask-concept
ValueTask (concept): een nieuwer retourtype dat geheugenallocaties bespaart voor resultaten die vaak al synchroon beschikbaar zijn.
- Nuttig wanneer resultaten meestal al beschikbaar zijn
- Heeft regels om extra geheugenallocaties te voorkomen
- Niet beschikbaar in C# 6 — gebruik hier Task; de ideeën blijven van toepassing
Async-toestandsmachine
Samenvatting
Samenvatting: Task modelleert werk; await pauzeert en hervat; de compiler bouwt een toestandsmachine. ValueTask is een optimalisatieconcept (gebruik Task in C# 6).
Leer C# met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 93
- Lessen
- 346
Veelgestelde vragen
Is de les “Task/ValueTask en de async state machine (concepten)” gratis?
Ja — de volledige tekst van “Task/ValueTask en de async state machine (concepten)” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 3 lessen.
Wat leer ik in “Task/ValueTask en de async state machine (concepten)”?
Begrijp Task-resultaten en het idee van de async state machine. Schrijf kleine async-methoden, combineer awaits en bekijk een handmatige TaskCompletionSource. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C# Academy te beginnen?
Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 3.
Hoe lang duurt de les “Task/ValueTask en de async state machine (concepten)”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C# Academy?
Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Task/ValueTask en de async state machine (concepten)
- Async-valkuilen: sync-over-async en deadlocks
- ConfigureAwait en exception flow