Task
Last updated
Was this helpful?
Last updated
Was this helpful?
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.
Den 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.
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.
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:
Pausar körningen av koden tills den inkapslade metoden körts färdigt.
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().
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.
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.
Task.Run tar emot en 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 som sin Action.
De flesta async-metoder får man från något existerande bibliotek, till exempel . Standard är att döpa dem till något som slutar på Async.