2009-01-09 18 views
1

Imaginez que j'ai un code à lire dès le début à la fin d'un fichier comme ceci:Comment utiliser IHTTPAsyncHandler?

while(sw.readline != null) 
{ 

} 

Je veux que ce soit totalement asynchrone. En dérivant de IHTTPAsyncHandler, où irait ce code et où irait le code pour obtenir le contenu de chaque ligne?

Répondre

-2

J'ai récemment ajouté des processus asynchrones à mes pages ASP.NET afin de permettre à certains processus de longue durée d'avoir lieu pendant que l'utilisateur attendait les résultats. J'ai trouvé le IHTTPAsyncHandler assez inadéquat. Tout ce qu'il fait est de vous permettre de faire tourner un nouveau fil pendant que la page commence à traiter. Vous devez toujours créer votre propre thread et créer un AsyncRequestResult.

Au lieu de cela, je fini juste en utilisant un fil normal dans mon codebehind à la place, beaucoup plus succincte:

using System; 
using System.Web; 
using System.Threading; 

namespace Temp { 
    public partial class thread : System.Web.UI.Page { 
     protected void Page_Load(object sender, EventArgs e) { 
      Thread thread = new Thread(new ThreadStart(myAsyncProcess)); 
      thread.Start(); 
     } 

     private void myAsyncProcess() { 
      // Long running process 
     } 
    } 
} 
+0

Ne serait-vous être désemparés quant au moment où cette fonction a été terminée? –

+0

Oui, d'habitude, j'utiliserais ceci pour appeler un processus de longue durée et l'oublier. Mais si j'avais besoin de savoir quand cela a été fait, ou si c'est fini, la fin du processus peut mettre à jour un statut dans une base de données. Si la page Web sur laquelle vous vous trouvez a besoin de savoir quand cela est fait, dites une barre de progression suivie d'un "Terminé!" message, myAsyncProcess peut mettre à jour un objet Session périodiquement en cours de route. Utilisez ensuite une minuterie côté client (par exemple, ASP.NET AJAX Timer) pour appeler une fonction sur le serveur afin de vérifier l'état de la session. – DavGarcia

+0

J'ai utilisé votre code mais une exception est levée: "L'exécution synchrone d'une tâche asynchrone n'est pas autorisée" – Xaqron