2009-02-23 8 views
8

Quelle est la meilleure pratique pour obtenir un webrequest de manière asynchrone?Meilleures pratiques de Webrequest asynchrones

Je veux télécharger une page sur Internet (n'importe ce que) et éviter de bloquer un fil autant que possible.

Auparavant, je pensais qu'il suffisait d'utiliser la paire 'BeginGetResponse' et 'EndGetResponse'. Mais en regardant de plus près, je vois aussi qu'il ya la possibilité d'utiliser « BeginGetRequestStream »

[UPDATE] GetRequestStream est utilisé pour les opérations POST

Et puis pour ajouter à la confusion, devrais-je utiliser flux. BeginRead et EndRead?

[UPDATE] cette article suggère qu'il est encore préférable de traiter le HttpResponse.GetResponseStream de manière asynchrone à l'aide Stream.BeginRead

Quel gâchis!

Quelqu'un peut-il me diriger dans la bonne direction?

Quelle est la meilleure pratique?

Répondre

0
  1. Vous utilisez Begin/EndGetResponse à asynchonously attendre la réponse HTTP. Si vous effectuez un test POST et avez besoin d'envoyer beaucoup de données de manière asynchrone, utilisez Begin/EndGetRequestStream.

  2. Ceci n'est pas unique à la communication asynchrone - vous pouvez rechercher les versions synchrones pour obtenir des informations supplémentaires. Je ne suis pas sûr de savoir pourquoi vous feriez un Read sur le flux de la requête - très probablement vous y écrivez et lisez depuis le flux de réponse.

Enfin, Jeffrey Richter's blog a un article sur quelques-unes des subtilités de HttpWebRequest et cours d'eau.

+0

oui je pense que j'ai été confondu avec le but de 'BeginGetRequestStream' –

5

Vous pouvez coder vous-même tout ou vous pouvez simplement utiliser WebClient qui fait beaucoup de travail de base pour vous. Par exemple, pour télécharger un fichier sous la forme d'une chaîne, vous appellerez DownloadStringAsync() qui déclenchera éventuellement l'événement OnDowloadStringCompleted. Si le fichier est binaire, vous pouvez essayer d'utiliser DownloadDataAsync() à la place.