Hallo Leute,
ich versuche seit einigen Tagen den Sinn & Zweck von Async Await zu verstehen,
was mir leider noch nicht gelungen ist.
Kann mir wer erklären was der Vorteil gegenüber von einem einfachen
Task.Run() ist !?!?
Hier meine Tests....
static void Main(string[] args)
{
var x=Test();
var y=Task.Run(Test2);
y.Wait();
x.Wait();
Console.WriteLine("READY");
Console.ReadKey(true);
}
public static async Task<int> Test()
{
var t = Task.Run(() =>
{
for (int i = 0; i < 80; i++)
Console.WriteLine("TEST" + i);
});
await t;
return 123;
}
public static int Test2()
{
for (int i = 0; i < 80; i++)
Console.WriteLine("T2 " + i);
return 999;
}
Hallo Magier69,
bei deinen Tests hat es keinen Vorteil.
Stell dir aber vor du willst eine IO-Operation (Input, Output) wie z.B. Netwerkzugriffe ala Datenbankabfrage, Web-Request, etc. durchführen so würde bei
var result = service.GetData(...);
UseResult(result);
der ausführende Thread blockiert werden, bis das Ergebnis vorliegt. Das ist nicht ideal.
Daher gibt es asynchrone IO-Vorgänge, bei denen ein Task erzeugt wird und keinen Thread blockiert, sondern bei "Abschluss" des IO-Vorgangs ein sogenannter IO-Thread vom ThreadPool verwendet wird um das "Callback" durchzuführen. Hier eignet sich async/await, da eleganter Code geschrieben werden kann der leserlich ist.
var result = await service.GetDataAsync(...);
UseResult(result);
service.GetDataAsync
gibt dabei eine Task zurück, der C#-Compiler erkennt das async/await und erstellt für dich Code der sehr grob analog zu
Task resultTask = service.GetDataAsync(...);
resultTask.ContinueWith(t => UseResult(t.Result));
ist. Da ist der "await Code" schon leserlicher, v.a. wenn mehrere awaits in einer Methode sind.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo gfoidl,
danke für Deine Nachricht.
Ja, ich glaube ich kann es .... langsam... nachvollziehen.
Da muss ich mich noch anfreunden damit... 😃
VG
Magier69
Hallo Magier69,
anfreunden damit...
Ja mach das und probiers einfach aus, dann kannst Freude damit haben das es viel umständlichen Code erspart.
Sonst frag einfach wieder im Forum nach 😉
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Und wichtig:
Asynchrone Programmierung ist nicht dazu da, dass Dein Code schneller läuft - das tut er nicht.
Der Sinn ist, dass Code nicht mehr blockiert - und das hat in vielen Fällen die Folge, dass die Ressourcen der ausführenden Umgebung (zB. Dein PC) effizienter genutzt werden und insgesamt mehr geleistet werden kann.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code