387 Stimmen

In Erwartung mehrerer Aufgaben mit unterschiedlichen Ergebnissen

Ich habe 3 Aufgaben:

private async Task FüttereKatze() {}
private async Task VerkaufeHaus() {}
private async Task KaufeAuto() {}

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 irgendetwas gemeinsam miteinander

Wie rufe ich die 3 Aufgaben auf, warte auf deren Abschluss und erhalte dann die Ergebnisse?

-1voto

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

wenn du auf Cat zugreifen möchtest, machst du dies:

var ct = (Cat)dn[0];

Dies ist sehr einfach zu tun und sehr nützlich zu verwenden, es ist nicht notwendig, eine komplexe Lösung zu verfolgen.

-3voto

Mathias Nohall Punkte 727

Stellt das await-Statement nicht sicher, dass der Code in sequenzieller Reihenfolge ausgeführt wird? Betrachten Sie den folgenden Code

class Program
{
    static Stopwatch _stopwatch = new();

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

        Console.WriteLine($"Verwendung von Await");
        _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} Katze füttern gestartet");
        await Task.Delay(1000);
        Console.WriteLine($"{_stopwatch.ElapsedMilliseconds} Katze füttern erledigt");
    }

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

Fire hot
0 Autokauf gestartet
3 Katze füttern gestartet
4 Haus verkaufen gestartet
18 Haus verkaufen erledigt
1004 Katze füttern erledigt
2013 Autokauf erledigt
2014 erledigt!
Verwendung von Await
0 Autokauf gestartet
2012 Autokauf erledigt
2012 Katze füttern gestartet
3018 Katze füttern erledigt
3018 Haus verkaufen gestartet
3033 Haus verkaufen 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