2008-11-20 10 views
0

J'utilise plusieurs instances de la classe WebClient afin de télécharger de nombreux petits fichiers en même temps de manière asynchrone à partir d'un serveur Web sur Internet.
L'URI que j'utilise a sa notation IP en nombre pour éviter les résolutions DNS inutiles.WebClient.DownloadFileAsync: Avec de nombreux téléchargements de fichiers

Je le pousse un peu, en utilisant par ex. Plus de 50 instances de la classe en même temps. Ce que j'ai remarqué est que, bien que la plupart des fichiers soient téléchargés correctement, un petit pourcentage d'entre eux ont une longueur de 0, ce qui signifie que le thread n'a jamais été exécuté avec succès - peut-être en raison d'une erreur.
Cependant, le AsyncCompletedEventArgs n'a jamais signalé d'erreur.

Est-ce que je pousse trop? Mais encore une fois, ne devrait-il pas dégager une erreur?

+0

Avez-vous un extrait de code qui reproduit/affiche l'erreur? –

+0

Robert a raison, sans un échantillon pour nous de voir comment vous gérez les demandes asynchrones, il sera difficile de répondre. Vous ne recevrez que des suppositions. –

+0

Désolé, je pensais que vous aviez une réponse rapide et sale. Je vais refactoriser mon code pour qu'il soit plus facile pour vous de l'analyser et de l'afficher dès que possible. –

Répondre

1

En cas où quelqu'un obtient sur ce vraiment vieille question, la meilleure estimation est que le fil a été ainsi tué avant que le téléchargement est terminé, ce qui conduit à déposer avec une taille égale à 0.

Par exemple, nous allons comparer ce qui se passe entre

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WebClient client = new WebClient(); 
      client.DownloadFileAsync(new Uri("http://ipv4.download.thinkbroadband.com/5MB.zip"), "C:\\5MB.zip"); 
      Thread.Sleep(30000); 
     } 
    } 
} 

et

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WebClient client = new WebClient(); 
      client.DownloadFileAsync(new Uri("http://ipv4.download.thinkbroadband.com/5MB.zip"), "C:\\5MB.zip"); 
     } 
    } 
} 

Dans le second cas, dès que le téléchargement est démarré, le programme se termine en provoquant un téléchargement interrompu, qui se manifeste par le fichier créé sur le lecteur C: avec la taille 0.

Questions connexes