2016-08-03 3 views
1

Ich versuche, eine asynchrone Aufgabe im Code-Behind für meine aspx-Seite auszuführen. Ich verwende Page.RegisterAsyncTask und Page.ExecuteRegisteredAsyncTasks, um die asynchrone Methode auszuführen.Wie kann ich in einer Aschex- und Aspx-Datei auf der gleichen Website auf/async zugreifen?

Allerdings bekomme ich die Fehlermeldung, dass ich <httpRuntime targetFramework="4.5" /> zu meiner Webconfig-Datei hinzufügen muss, aber beim Hinzufügen dieser Zeile, meine Verwendung von async/await start werfen einen Fehler in meiner Aschx-Seiten.

Ein asynchroner Betrieb kann zu diesem Zeitpunkt nicht gestartet werden. Asynchrone Operationen können nur innerhalb eines asynchronen Handlers oder Moduls oder während bestimmter Ereignisse im Seitenlebenszyklus gestartet werden. Wenn diese Ausnahme beim Ausführen einer Seite aufgetreten ist, stellen Sie sicher, dass die Seite als <% @ Page Async = "true"%> markiert ist. Diese Ausnahme kann auch auf einen Versuch hinweisen, eine "async void" -Methode aufzurufen, die in der ASP.NET-Anforderungsverarbeitung im Allgemeinen nicht unterstützt wird. Stattdessen sollte die asynchrone Methode eine Aufgabe zurückgeben, und der Aufrufer sollte darauf warten.

Async/erwartet Arbeit völlig in Ordnung in der Ashx Seite vor <httpRuntime targetFramework="4.5" /> So Hinzufügen wie kann ich async/await in beiden Arten von Dateien zu arbeiten?

+0

Für die Klasse im Zusammenhang mit Ihrer Ashx Datei nehmen kann; Von was erbt es? ': HttpTaskAsyncHandler' oder': IHttpAsyncHandler' oder ': IHttpHandler'? –

+0

'IHttpHandler'. Das Warten ist innerhalb der processRequest-Methode. Es verwendet eine abwartbare Bibliotheksmethode. Der Handler selbst wird von nichts erwartet. –

+0

Das Ersetzen von 'IHttpHandler' mit' HttpTaskAsyncHandler' machte den Trick –

Antwort

6

Heutzutage möchten Sie wahrscheinlich aschx-Dateien standardmäßig asynchron erstellen. Das Framework unterstützt dies durch die Verwendung des neuen HttpTaskAsyncHandler.

Erben Sie einfach von HttpTaskAsyncHandler anstelle von IHttpHandler.

löschen Sie dann die Methode:

public ProcessRequest(HttpContext context) 

und seinen Code in

public override async Task ProcessRequestAsync(HttpContext context) 

bewegen, wo Sie die Vorteile von Aufgaben

+0

Vielen Dank für Ihre Lösung :) –

+0

Schade, ich kann Sie nicht zweimal upvote, danke! – Terkhos

Verwandte Themen