2 votes

Comment puis-je utiliser await/async à la fois dans un fichier ashx et aspx sur le même site ?

J'essaie d'exécuter une tâche asynchrone dans le code-behind de ma page aspx. J'utilise Page.RegisterAsyncTask y Page.ExecuteRegisteredAsyncTasks pour exécuter la méthode asynchrone.

Cependant, j'obtiens l'erreur disant que je dois ajouter <httpRuntime targetFramework="4.5" /> à mon fichier webconfig, mais en ajoutant cette ligne, mon utilisation de async/await commence à lancer une erreur dans mes pages ashx.

Une opération asynchrone ne peut pas être lancée pour le moment. Les opérations asynchrones ne peuvent être lancées qu'à l'intérieur d'un gestionnaire ou d'un module asynchrone ou lors de certains événements du cycle de vie de la page. Si cette exception s'est produite pendant l'exécution d'une page, assurez-vous que la page est marquée <%@ Page Async="true" %>. Cette exception peut également indiquer une tentative d'appel d'une méthode "async void", qui n'est généralement pas prise en charge dans le cadre du traitement des demandes ASP.NET. Au lieu de cela, la méthode asynchrone doit retourner une tâche, et l'appelant doit l'attendre.

Async/await fonctionnent parfaitement bien dans la page ashx avant d'ajouter <httpRuntime targetFramework="4.5" /> Alors comment faire pour qu'async/await fonctionne dans les deux types de fichiers ?

9voto

Buh Buh Points 2624

De nos jours, lorsque vous créez des fichiers ashx, vous souhaitez probablement qu'ils soient asynchrones par défaut. Le framework supporte cela en utilisant la nouvelle fonction HttpTaskAsyncHandler .

Il suffit d'hériter de HttpTaskAsyncHandler au lieu de IHttpHandler .

Ensuite, supprimez la méthode :

public ProcessRequest(HttpContext context)

et déplacer son code pour qu'il soit dans

public override async Task ProcessRequestAsync(HttpContext context)

où vous pouvez tirer parti des Tâches

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X