Asynchroner Deadlock?

8

Ich bin ziemlich positiv, dass ich in meiner Anwendung einen Deadlock erzeuge, und ich bin mir nicht sicher, wie ich das Problem lösen soll. Ich habe ein paar bewegliche Teile und bin neu in async und await also bitte mit mir.

Ich habe einen Client, der eine Datei wie folgt hochlädt:

%Vor%

Das Stück, das die Datei empfängt:

%Vor%

Es wird alles mit dem folgenden angefangen:

%Vor%

Alles scheint zu funktionieren, außer dass PostAsync niemals erkennt, dass task zurückgegeben wurde. Ich kann sehen, dass der Status der await ... PostAsync ... Aufgabe WaitingForActivation ist, aber ich bin mir nicht ganz sicher, was das bedeutet (denken Sie daran, ich bin ein N00b zu diesem Zeug). Meine Datei wird am richtigen Ort gespeichert, aber die Anwendung erkennt die Antwort meines Dienstes nie.

Wenn mir jemand in die richtige Richtung zeigen könnte, wäre das sehr zu begrüßen.

    
Joe 22.07.2014, 05:07
quelle

1 Antwort

6

Ich denke, das Problem ist, dass Sie einfach UploadToService auf eine Feuer-und-vergessen-Weise in Page_Load aufrufen. Die Anfrageverarbeitung endet einfach, bevor diese Aufgabe abgeschlossen ist.

Sie sollten <%@ Page Async="true" ...> auf dieser WebForms-Seite verwenden und <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> in Ihre web.config einfügen.

Dann benutze RegisterAsyncTask , der Code würde so aussehen:

%Vor%

Als Randnotiz könnten Sie diesen Teil verbessern:

%Vor%

so:

%Vor%

und ersetzen Sie ContinueWith durch async/await :

%Vor%

Related: "Verwenden von asynchronen Methoden in ASP. NET 4.5 ".

    
Noseratio 22.07.2014, 06:09
quelle

Tags und Links