Angenommen, ich habe eine Klasse Repository
mit einem DbContext
. In dieser Klasse habe ich eine Methode:
In einer Klasse Service
verwende ich diese Methode, um ein Objekt zu erstellen:
Und schließlich in meinem api-Controller MyObjectController
gebe ich dieses Objekt wie folgt zurück:
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?
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.
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
Tags und Links c# entity-framework asynchronous