ASP.Net MVC 4-Controller reagiert nicht mehr, wenn async verwendet wird

8

Ich verwende Visual Studio 2012 RC mit .Net 4.5 und ASP MVC 4 RC. Es hängt, wann immer ich Async benutze. Die Controller-Aktionsmethode verwendet Async, ist aber selbst keine asynchrone Controller-Methode.

Es werden keine Fehler protokolliert oder Ausnahmen ausgelöst, aber der Browser zeigt für immer "Warten auf www.myweb.local ".

%Vor%

Ich habe die Dinge getan, die in dieser Antwort aufgeführt sind , und es funktioniert immer noch nicht. dh. Die Datei web.config enthält

%Vor%

Und die Zauberworte await Task.Yield(); sind in der asynchronen Methode.

Die .NET Framework-Version ist 4.5.50501. Ich habe dieses Verhalten auf IIS Express und auf IIS 6.0 beobachtet.

Ich habe versucht, das "Juli 2012 Update" auf VS2012 anzuwenden, aber das hat es nicht behoben.

Diese Antwort schlägt vor , dass es möglicherweise daran liegt, dass die Aufgabe bereits abgeschlossen ist, wenn ich darauf warte der Fall, das sollte funktionieren und es nicht:

%Vor%

Einige Leute haben vorgeschlagen, dass ConfigureAwait(false) benötigt wird, aber dieser Code funktioniert auch nicht:

%Vor%

Das folgende funktioniert mit der Rasiermesseransicht-Engine, aber nicht mit dem Funken. Sicherlich sollte es einen Weg geben, das andere Szenario auch zu funktionieren? Kann man die asynchronen Tasks nicht innerhalb eines synchronen Codes verwenden?

%Vor%

Ich weiß, dass dies keine freigegebene Software ist, aber Microsofts RCs sind normalerweise ziemlich stabil, also bin ich überrascht, dass es fehlschlägt und auf eine nicht hilfreiche Weise scheitert.

    
Anthony 23.05.2017, 11:45
quelle

2 Antworten

9

Sie verursachen einen Deadlock, genau wie diese Frage .

James Mannings Vorschlag ist richtig, aber Sie müssen await das Ergebnis von ConfigureAwait , wie folgt:

%Vor%

Im Allgemeinen ist das Mischen von synchronem und asynchronem Code eine wirklich schlechte Idee, es sei denn, Sie wissen wirklich, was Sie tun. Die asynchrone Controller-Aktion wäre viel besser.

    
Stephen Cleary 06.07.2012 20:10
quelle
1

Ich hatte asynchrone Arbeit in der Beta. Ich habe es nicht getestet, aber ich vermute, es liegt daran, dass Ihre Controller-Methode nicht asynchron ist. Ändern Sie es zu diesem:

%Vor%     
James World 06.07.2012 15:41
quelle