Task.WaitAll wartet nicht auf Abschluss der Aufgabe

Während ich versuche, das Neue herauszufinden (vielleicht jetzt nicht so neu, aber trotzdem neu für mich)Task asynchrone Programmierung in C #, ich stieß auf ein Problem, das ich ein wenig herausfinden musste, und ich bin mir nicht sicher, warum.

Ich habe das Problem behoben, bin mir aber immer noch nicht sicher, warum es ein Problem war. Ich dachte nur, ich würde meine Erfahrungen teilen, falls jemand da draußen in die gleiche Situation gerät.

Wenn ein Guru mich über die Ursache des Problems informieren möchte, wäre das wunderbar und sehr geschätzt. Ich mag es immer zu wissen, nurWaru etwas funktioniert nicht!

Ich habe eine Testaufgabe wie folgt durchgeführt:

Random rng = new Random((int)DateTime.UtcNow.Ticks);
int delay = rng.Next(1500, 15000);
Task<Task<object>> testTask = Task.Factory.StartNew<Task<object>>(
    async (obj) =>
        {
            DateTime startTime = DateTime.Now;
            Console.WriteLine("{0} - Starting test task with delay of {1}ms.", DateTime.Now.ToString("h:mm:ss.ffff"), (int)obj);
            await Task.Delay((int)obj);
            Console.WriteLine("{0} - Test task finished after {1}ms.", DateTime.Now.ToString("h:mm:ss.ffff"), (DateTime.Now - startTime).TotalMilliseconds);
            return obj;
        },
        delay
    );
Task<Task<object>>[] tasks = new Task<Task<object>>[] { testTask };

Task.WaitAll(tasks);
Console.WriteLine("{0} - Finished waiting.", DateTime.Now.ToString("h:mm:ss.ffff"));

// make console stay open till user presses enter
Console.ReadLine();

Und dann habe ich die Anwendung ausgeführt, um zu sehen, was sie ausgespuckt hat. Hier ist ein Beispiel für die Ausgabe:

6: 06: 15.5661 - Testaufgabe wird mit einer Verzögerung von 3053 ms gestartet.
6: 06: 15.5662 - Warten beendet.
6: 06: 18.5743 - Testaufgabe nach 3063,235 ms beendet.

Wie Sie sehen können, dieTask.WaitAll(tasks); Anweisung hat nicht viel getan. Es hat insgesamt 1 Millisekunde gewartet, bevor die Ausführung fortgesetzt wurde.

Ich habe meine eigene "Frage" unten beantwortet - aber wie oben gesagt - wenn jemand, der besser informiert ist als ich, erklären möchte, warum dies nicht funktioniert, bitte! (ICHdenke Es hat möglicherweise etwas mit der Ausführung der Methode zu tun, wenn sie ein @ erreichawait operator - tritt dann zurück, sobald das Warten beendet ist ... Aber ich irre mich wahrscheinlich)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage