Wann sollten Sie auf eine Aufgabe warten?

8

Angenommen, ich habe eine Klasse Repository mit einem DbContext . In dieser Klasse habe ich eine Methode:

%Vor%

In einer Klasse Service verwende ich diese Methode, um ein Objekt zu erstellen:

%Vor%

Und schließlich in meinem api-Controller MyObjectController gebe ich dieses Objekt wie folgt zurück:

%Vor%

Ich bin verwirrt über all diese async und await Keywords. Ich weiß, dass ein Task zu erwarten ist. Bedeutet das, dass ich einfach Task von CreateAsync zurückgeben kann, ohne in CreateAsync oder Create zu warten und dann schließlich in Get abwartet? Hat es eine negative Auswirkung auf meine Anwendung, die ich wie im Beispiel erwartet?

    
transporter_room_3 30.05.2015, 12:10
quelle

2 Antworten

4
  

Bedeutet dies, dass ich die Aufgabe einfach von CreateAsync zurückgeben konnte, ohne in CreateAsync oder Create zu warten und dann schließlich in Get erwarten?

Ja, Sie können das tun, es ist tatsächlich effizienter. Wenn Sie Ihr Warten so machen, wie Sie es tun, wird jede asynchrone Methode eine Zustandsmaschine erzeugen, was mehr Code und mehr Kontextwechsel bedeutet.

  

Hat es eine negative Auswirkung auf meine Anwendung, die ich wie im Beispiel erwartet?

Aufgrund der Zustandsmaschine und der Kontextumschaltung wird es zu einer geringfügigen Leistungseinbuße kommen. Die Kosten sind in der Regel viel geringer als die Kosten des Anrufs, aber am Ende summiert sich alles. Async-Leistung: Die Kosten von Async verstehen und warten ist ein großartiger Artikel zu diesem Thema.

Wie @Richard Szalay darauf hingewiesen hat, stellen Sie sicher, dass Sie schließlich await der Task ausführen, andernfalls werden alle auftretenden Ausnahmen unbeobachtet bleiben und verschluckt werden.

    
Ned Stoyanov 30.05.2015, 12:15
quelle
0

async und await wird verwendet, wenn eine Methode asynchron ausgeführt werden soll. Async ohne Wartezeit ist ein synchrones

asynchrone Methoden geben Task oder void zurück Warten Sie, bis die Aufgabe abgeschlossen ist.

so erwartet wird vor einer Methode verwendet, die die Aufgabe zurückgibt

Ihre Get-Methode wartet darauf, Ihre create () -Aufgabe abzuschließen, die auf den Abschluss der createAsync-Aufgabe wartet

und so weiter.

_dbContext.SaveChangesAsync () ist eine asynchrone Methode, so dass aaawait benötigt wird, andernfalls kann es ein falsches o zurückgeben

Lassen Sie es mich wissen, wenn Sie weitere Erläuterungen benötigen

    
Abhineet Kumar 30.05.2015 13:25
quelle