Hallo,
ich setze mich mit asychroner Programmierung auseinander. Wie muss das o.g. Programm schreiben, so dass ""5. Das soll parallel und unabhängig von der async Methode laufen" vor "4. langeBerechnung ist fertig" auftaucht?
using System;
using System.Threading.Tasks;
using System.Threading;
namespace AsyncApp
{
class Program
{
static void Main(string[] args)
{
DoSynchronousWork();
Task someTask = DoSomethingAsync2();
DoSynchronousWorkAfterAwait();
someTask.Wait();
Console.ReadLine();
}
//Berechnet einen Wert. Berechnung dauert sehr lange
static async Task<int> langeBerechnung()
{
Console.WriteLine("3. langeBerechnung mach eine lange und komplizierte Berechnung");
Thread.Sleep(1000 * 4);
Console.WriteLine("4. langeBerechnung ist fertig");
return (1);
}
static async Task<int> DoSomethingAsync2()
{
Console.WriteLine("2. Async task gestartet...");
var result=await langeBerechnung();
return result;
}
static void DoSynchronousWorkAfterAwait()
{
Console.WriteLine("5. Das soll parallel und unabhängig von der async Methode laufen");
}
public static void DoSynchronousWork()
{
Console.WriteLine("1. Mach was synchrones");
}
}
}
Erklärt in der Microsoft Doku (Asynchrone Programmierung mit async und await) oder auch von Nick Capsas Making async code run faster in C# - YouTube
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
wenn du etwas parallel ausführen möchtest, dann starte vorher einen eigenen Task mittels Task.Run(...)
:
Task.Run(() => DoSynchronousWorkAfterAwait()); // der Name paßt aber dann nicht mehr
await DoSomethingAsync2();
Zum Test benutze dann
static void DoSynchronousWorkAfterAwait()
{
Console.WriteLine("5. Das soll parallel und unabhängig von der async Methode laufen");
Thread.Sleep(1000 * 2);
Console.WriteLine("5. Beendet");
}