387 Stimmen

In Erwartung mehrerer Aufgaben mit unterschiedlichen Ergebnissen

Ich habe 3 Aufgaben:

private async Task FeedCat() {}
private async Task SellHouse() {}
private async Task BuyCar() {}

Sie müssen alle ausgeführt werden, bevor mein Code fortgesetzt werden kann, und ich benötige auch die Ergebnisse von jedem. Keine der Ergebnisse hat etwas gemeinsam miteinander

Wie rufe und warte ich auf die Beendigung der 3 Aufgaben und erhalte dann die Ergebnisse?

-1voto

var dn = await Task.WhenAll(FeedCat(),SellHouse(),BuyCar());

if you want to access Cat, you do this:

var ct = (Cat)dn[0];

Dies ist sehr einfach zu tun und sehr nützlich zu verwenden, es ist nicht notwendig, nach einer komplexen Lösung zu suchen.

-3voto

Mathias Nohall Punkte 727

Beinhaltet die await-Anweisung nicht die Ausführung des Codes in sequenzieller Reihenfolge? Betrachten Sie den folgenden Code

class Program
{
    static Stopwatch _stopwatch = new();

    static async Task Main(string[] args)
    {
        Console.WriteLine($"Feuer heiß");
        _stopwatch.Start();
        var carTask = BuyCar();
        var catTask = FeedCat();
        var houseTask = SellHouse();
        await carTask;
        await catTask;
        await houseTask;
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} erledigt!");

        Console.WriteLine($"await verwenden");
        _stopwatch.Restart();
        await BuyCar();
        await FeedCat();
        await SellHouse();            

        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} erledigt!");
    }

    static async Task BuyCar()
    {
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Autokauf gestartet");
        await Task.Delay(2000);
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Autokauf erledigt");
    }

    static async Task FeedCat()
    {
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Fütterung der Katze gestartet");
        await Task.Delay(1000);
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Fütterung der Katze erledigt");
    }

    static async Task SellHouse()
    {
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Hausverkauf gestartet");
        await Task.Delay(10);
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Hausverkauf erledigt");
    }
}

Feuer heiß
0 Autokauf gestartet
3 Fütterung der Katze gestartet
4 Hausverkauf gestartet
18 Hausverkauf erledigt
1004 Fütterung der Katze erledigt
2013 Autokauf erledigt
2014 erledigt!
await verwenden
0 Autokauf gestartet
2012 Autokauf erledigt
2012 Fütterung der Katze gestartet
3018 Fütterung der Katze erledigt
3018 Hausverkauf gestartet
3033 Hausverkauf erledigt
3034 erledigt!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X