WORDS
Komposition: Arbeta med flera Task
s
När man arbetar med Task
s i C# vill man ibland köra flera av dom parallellt, eller kanske veta när den första är avslutad.
// Starta en task.
var task1 = Task.Run(() =>
{
if (!myServer.IsRunning)
myServer.Start();
myMonitorService.Start();
});
// Starta ytterligare en task.
var task2 = Task.Run(() => anotherService.Start());
// Vänta synkront på att dessa tasks ska avslutas.
Task.WaitAll(task1, task2);
I koden ovanför, körs alltså task1
och task2
parallellt. Därefter blockeras tråden till dess att både task1
och task2
har avslutats, oavsett vilken av dom som blir klar först. Även om koden bara använder två Task
s, så kan WaitAll
ta ett obegränsat antal Task
s som inparametrar. Detta gäller samtliga nedanstående metoder.
Vänta på att... | ...alla givna tasks avslutas | ...första bästa task avslutas |
---|---|---|
Synkront | Task.WaitAll |
Task.WaitAny |
Asynkront | Task.WhenAll |
Task.WhenAny |
Med WaitAll
och WaitAny
blockeras alltså aktuell tråd, medan WhenAll
och WhenAny
returnerar nya Task
s.