La version 2.0 d'ASP.NET vous permet d'inscrire plusieurs tâches dans une page et de les exécuter de manière asynchrone avant de générer le rendu de la page. Vous pouvez spécifier d'exécuter une tâche de manière asynchrone s'il s'agit d'un processus lent et que vous ne souhaitez pas bloquer d'autres processus lors de son exécution. Les tâches asynchrones peuvent être exécutées en parallèle ou séquentiellement.
Un objet PageAsyncTask doit être inscrit dans la page par l'intermédiaire de la méthode RegisterAsyncTask. La page elle-même ne doit pas être traitée de manière asynchrone pour exécuter des tâches asynchrones. Que vous affectiez à l'attribut Async la valeur true (comme indiqué dans l'exemple de code suivant) ou false sur la directive de page, les tâches asynchrones sont traitées de manière asynchrone :
<%@ Page Async="true" %>
Lorsque l'attribut Async a la valeur false, le thread qui exécute la page est bloqué jusqu'à ce que toutes les tâches asynchrones soient terminées.
Toutes les tâches asynchrones inscrites avant l'événement PreRenderComplete sont exécutées automatiquement par la page si elles n'ont pas déjà été exécutées. Les tâches asynchrones inscrites après l'événement PreRenderComplete doivent être exécutées explicitement par l'intermédiaire de la méthode ExecuteRegisteredAsyncTasks. La méthode ExecuteRegisteredAsyncTasks peut également être utilisée pour démarrer les tâches avant l'événement PreRenderComplete. La méthode ExecuteRegisteredAsyncTasks exécute toutes les tâches asynchrones inscrites sur la page qui n'ont pas été exécutées.
Par défaut, le délai d'attente d'une tâche asynchrone expire si elle ne se termine pas en moins de 45 secondes. Vous pouvez spécifier une valeur de délai d'attente différente dans le fichier Web.config ou dans la directive de page. La section <pages> du fichier Web.config contient un attribut asyncTimeout, comme indiqué ci-dessous.
<system.web>
<pages asyncTimeout="30">
</pages>
</system.web>
La directive de page contient un attribut AsyncTimeout.
<%@ Page AsyncTimeout="30" %>