Task
OBS: Ganska mycket överkurs. Det här möter man normalt först på högskola/universitet.
Den korta versionen: Om man använder ett bibliotek som tillhandahåller asynkrona metoder som returnerar Task<>, så kan man göra metoden man själv skriver, där metoden anropas, asynkron och då får man använda await.
Det gör att man inte måste vänta på att den asynkrona metoden avslutas innan man går vidare – man kan göra det väntandet när man vill.
Task<>
Den generiska Task-klassen abstraherar och förenklar användningen av threading i C#.
Genom att kapsla in en metod i en Task så körs metoden parallellt med övrig kod i programmet.
Oftast får man dock Tasks från metoder man inte själv skrivit, t.ex. från bibliotek man lagt till.
Task.Run()
Används för att köra en vanlig (icke-async) metod som en Task. Praktiskt framför allt för CPU-intensiva aktiviteter, som massiva och tidsintensiva beräkningar.
Task.Run tar emot en Action som parameter, och kör den som en Task. Run() returnerar en referens till task:en som körs. Som vanligt kan man ange antingen en existerande metod eller en anonym metod som sin Action.
Taskens typ-parameter ska vara densamma som returtypen för metoden som kapslas in.
Vill man köra Task.Run med en metod som tar emot parametrar så kan man nyttja en anonym metod:
Wait()
Pausar körningen av koden tills den inkapslade metoden körts färdigt.
Result
Innehåller det som returnerats från den inkapslade metoden, när den körts färdigt. Om Result läses av innan metoden körts färdigt så pausar koden precis som med Wait().
Await
Väntar på att en Task ska avslutas. Tasken kan skapas/köras på samma rad eller, vilket är vanligare och smartare, på en rad längre upp.
Async
De flesta async-metoder får man från något existerande bibliotek, till exempel RestSharp. Standard är att döpa dem till något som slutar på Async.
En asynkron metod:
Deklareras med async
Döps till något som slutar med Async
Har alltid en Task som returtyp
När man faktiskt skriver return, så är det inte en Task, utan den datatyp som Task:en har mellan <>. Så en async-metod med Task<int> som returtyp bör ha t.ex. en
return 34;
.
Oftast skriver man asynkrona metoder när man har nytta av await – vilket man normalt sett bara har ifall man vill köra igång flera Tasks och köra dem parallellt, för att sedan await:a deras avslut.
Last updated