ich dieses Beispiel-Code haben:ContinueWith Verkettung funktioniert nicht wie erwartet
static void Main(string[] args) {
var t1 = Task.Run(async() => {
Console.WriteLine("Putting in fake processing 1.");
await Task.Delay(300);
Console.WriteLine("Fake processing finished 1. ");
});
var t2 = t1.ContinueWith(async (c) => {
Console.WriteLine("Putting in fake processing 2.");
await Task.Delay(200);
Console.WriteLine("Fake processing finished 2.");
});
var t3 = t2.ContinueWith(async (c) => {
Console.WriteLine("Putting in fake processing 3.");
await Task.Delay(100);
Console.WriteLine("Fake processing finished 3.");
});
Console.ReadLine();
}
Die Konsolenausgabe verwirrt mich:
- in gefälschten Verarbeitung Putting 1.
- Gefälschte Verarbeitung beendet 1.
- Putting in gefälschte Verarbeitung 2.
- Putting in gefälschte Verarbeitung 3.
- Fake-Verarbeitung fertig 3.
- Fake-Verarbeitung 2. fertig
Ich bin an die Kette zu versuchen, die Aufgaben, so dass sie eine nach der anderen ausführen, was mache ich falsch? Und ich kann nicht erwarten, das ist nur Beispielcode, in Wirklichkeit stehe ich eingehende Aufgaben (einige asynchron, manche nicht) und möchte sie in der gleichen Reihenfolge ausführen, in der sie kamen, aber ohne Parallelität, ContinueWith schien besser als Erstellen eine ConcurrentQueue und Handhabung everything selbst, aber es funktioniert einfach nicht ...
Die Warteanweisung "spaltet" die Aufgabe. Also bezieht sich t1 nur auf die erste Hälfte. Ich bin überrascht, dass eine gefälschte Verarbeitung 2 nicht unmittelbar nach dem Einfügen einer gefälschten Verarbeitung erfolgt. 1 –
@WeylandYutani Ich erkläre in meiner Antwort, warum das nicht passiert. – Servy
eigentlich spreche ich wieder Müll, also ignoriere mich –