2010-08-17 5 views
1

J'ai une application qui télécharge des URL en utilisant threadPool dans différents threads, mais récemment j'ai lu un article (http://www.codeproject.com/KB/IP/Crawler.aspx) qui dit que HttpWebRequest.GetResponse() ne fonctionne que dans un thread et l'autre threads attend ce thread. d'abord je veux savoir est-ce vrai? Comment puis-je surveiller quel de mes threads est en train de télécharger avec son statut?Surveiller quel thread télécharge l'URL

Répondre

1

Je doute que HttpWebRequest.GetResponse bloquerait d'autres threads - mais vous pouvez vérifier cela facilement en utilisant des outils tels que Fiddler. Vous pouvez lancer le violoneur et lancer votre programme. La demande apparaîtra dans Fiddler dès que votre programme le fera et vous pourrez rapidement déterminer s'ils sont simultanés ou un par un.

+0

Oui votre commentaire sur la réponse INSTCODE est exactement ce que je dois savoir, je suis en cours d'exécution Fiddler, mais comment puis-je être certain à ce sujet, la cause Fiddler ne montre pas quelle demande est en cours d'exécution dans le cas de time – Ehsan

+0

Je crois que vos téléchargements prendront au moins quelques secondes - en tant que tel, vous devriez voir plusieurs requêtes simultanées dans fiddler prouvant que des requêtes parallèles sont possibles. Dans Fiddler, l'onglet statistiques vous indiquera l'heure de début et de fin de votre requête tandis que l'onglet chronologique vous montrera la ligne de temps combinée pour plusieurs requêtes (sessions appelées par fiddler) - sélectionnez plusieurs demandes de téléchargement et consultez l'onglet chronologique. – VinayC

1

Oui, GetResponse est un appel bloquant (vérifiez MSDN) qui peut uniquement renvoyer lorsque le serveur répond ou un délai d'attente de demande se produit. Après cela, vérifiez simplement le code d'état et utilisez GetResponseStream pour commencer à télécharger le contenu retourné. Comme ceci:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
if (response.StatusCode == 200) 
{ 
    Stream content = response.GetResponseStream(); 
    // Read the content and report the downloading progress... 
    ... 
} 
+0

Je ne pense pas qu'Ehsan s'inquiète de savoir si GetResponse bloque le thread en cours, il craint que cela ne bloque les appels GetResponse sur d'autres threads rendant impossible les téléchargements parallèles. – VinayC

Questions connexes