Hallo Sebrahi,
Ergänzung / Hinweis:
Zitat von T-Virus |
Parallel.Invoke auf den Abschluss der Operationen wartet.
|
Und zwar derart dass der aufrufende Thread (z.B. der Main-Thread) blockiert od. für eine Operation der auszuführenden verwendet wird.
Daher ist auf
[FAQ] Warum blockiert mein GUI? zu achten.
Würde der Code wie folgt geschrieben sein
public static async Task Start_myMethod1_asyncron()
{
await Task.Run(() => {
myMethod1();
});
}
public static async Task Start_myMethod2_asyncron()
{
await Task.Run(() => {
myMethod2();
});
}
public static async Task Main(string[] args)
{
await Task.WhenAll(Start_myMethod1_asyncron(), Start_myMethod2_asyncron());
//difference?
Parallel.Invoke(myMethod1, myMethod2);
}
so wird zwar per
Task.WhenAll auf das Ende der Ausführungen asynchron gewartet (await), aber während dieser Zeit ist der aufrufende Thread (hier: Main-Thread) "frei" und könnte andere Aufgaben erledigten.
Beim Parallel.Invoke ist das wie erwähnt nicht möglich.
Das soll jetzt nicht heißen dass Parallel.Invoke eher schlecht ist, sondern je nach konkreter Aufgabe kann es sogar sehr nützlich sein.
Zitat von T-Virus |
Wenn du einfach stumpf Methoden aufrufen willst, die auch keinen Rückgabewert/Parameter haben, kannst du das mit Parallel.Invoke machen.
|
Parallel Linq (PLinq) ist eine weitere Option die ganz passend sein kann.
mfG Gü