2016-11-07 4 views
-2

In ASP.NET MVC und Web-API, eine asynchrone Aktion ist eine Controller-Aktion-Methode mit dem async Modifikator markiert, zB:Was erwartet die Rückkehr einer asynchronen Aktionsmethode?

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 

Dadurch wird die Aktion-Methode als asynchrones markiert, daher guerre meiner nom de von ‚einem async action ', und es zeigt an, dass die Methode' erwartete andere Methoden async aufgerufen werden kann, und dass es von der oberen bis zur letzten Codezeile nicht vollständig ausgeführt wird. Es zeigt auch, dass es Anrufer nutzt so etwas wie ist:

ActionResult result = await Login(LoginViewModel model, string returnUrl) 

Bedeutung, dass dieser Aufruf für alle wenig warten (oder massiv) asynchrone Aufgaben durch Login ausgegliedert, bevor richtig zu beenden, die ActionRsult zurück. Wir sagen, dass der Anrufer auf seinen Anruf bei Login "wartet". Meine Frage ist, welches Objekt diesen Aufruf im zweiten Codeblock macht, und 'wartet auf die asynchrone Aktion'>

Ich habe mich nie wirklich darum gekümmert, was eine Aktion genannt wird, und warte, eine Methode vorher; Ich habe immer gedacht, dass es ziemlich nah an der Anfrage-Antwort-Pipeline ist, und bei einer asynchronen Aktion, die Ergebnisfilter ignoriert, geht es ziemlich direkt zum Browser.

Hat dieses Objekt, das auf Aktionsmethoden wartet, so dass es mehr von ihnen aufrufen kann und einen Rückstand in der Pipeline verhindert, oder sind alle nur async, so dass wir andere Aufgaben in ihnen erwarten können?

+2

Ich habe keine Ahnung, was Sie hier fragen. Vielleicht würde ein Codebeispiel helfen. – mason

+1

Die Framework-Pipeline wartet auf die Aktion. Letztendlich ist es der Zweck, Ressourcen freizugeben, die sonst auf andere Dinge warten (E/A, DB usw.), so dass der Webserver mehr Anfragen bearbeiten kann, während andere aktuelle Anfragen beschäftigt sind. – David

+0

@mason Nicht die Tags deuten darauf hin, dass Sie ein bisschen darüber wissen sollten, wovon ich spreche. Ich weiß nichts über Medizin, aber ich beschwere mich nicht, wenn ich mediale Fragen auf Foren nicht verstehe. – ProfK

Antwort

0

Bei einer asynchronen Aktion, die Ergebnisfilter ignoriert, geht es ziemlich direkt zum Browser.

Nein; asynchrone Aktionen werden genauso wie synchrone Aktionen verarbeitet und befinden sich auf der gleichen Abstraktionsebene. Sie überspringen keine Filter.

Der Unterschied zwischen synchronen und asynchronen Methoden besteht darin, dass synchrone Methoden abgeschlossen sind, wenn sie zu ihrem Aufrufer zurückkehren. asynchrone Methoden geben eine Aufgabe zurück, die nach Abschluss der Methode abgeschlossen wird. Weitere Informationen finden Sie in meinem Beitrag async intro.

Hat dieses Objekt, die Action-Methode so tun erwartet, dass es mehr von ihnen nennen kann und Rückstau in der Pipeline zu verhindern, oder ist das alles nur async, so dass wir andere Aufgaben in sie erwarten können?

Beide. Das Schlüsselwort async ist erforderlich, um das Schlüsselwort await zu verwenden, sodass aus der Perspektive der Aktion async erforderlich ist, um auf andere Aufgaben zu warten.

Aus der Perspektive des Frameworks versteht es, dass eine Aktion, wenn sie eine Aufgabe zurückgibt, nicht unbedingt abgeschlossen wurde. Stattdessen wird die Aktion abgeschlossen, wenn die zurückgegebene Aufgabe abgeschlossen ist. Das Framework verbindet einen Rückruf mit dieser Aufgabe, die die Antwort sendet, wenn diese Aufgabe abgeschlossen ist.

Verwandte Themen