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.
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:
Als Randnotiz könnten Sie diesen Teil verbessern:
%Vor%so:
%Vor% und ersetzen Sie ContinueWith
durch async/await
:
Related: "Verwenden von asynchronen Methoden in ASP. NET 4.5 ".
Tags und Links .net c# async-await