WebClient.DownloadFileAsync: со многими загрузками файлов - PullRequest
0 голосов
/ 20 ноября 2008

Я использую несколько экземпляров класса WebClient для одновременной асинхронной загрузки множества небольших файлов с веб-сервера в Интернете.
У URI, который я использую, есть его IP в числовой записи, чтобы избежать ненужных разрешений DNS.

Я немного нажимаю, например, используя 50+ экземпляров класса одновременно.

Что я заметил, так это то, что хотя большинство файлов загружаются правильно, небольшой процент из них имеет длину 0, что означает, что поток никогда не завершался успешно - возможно, из-за ошибки. Однако AsyncCompletedEventArgs никогда не сообщал об ошибке.

Я слишком много толкаю? Но опять же, не должно ли это выдать ошибку?

1 Ответ

1 голос
/ 10 февраля 2016

В случае, если кто-то ответит на этот действительно старый вопрос, лучше всего предположить, что поток был убит задолго до завершения загрузки, что привело к файлу с размером, равным 0.

Например, давайте сравним, что происходит между

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);
        }
    }
}

и

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");
        }
    }
}

Во втором случае, как только начинается загрузка, программа завершает работу, что приводит к прерванной загрузке, о чем свидетельствует файл, создаваемый на диске C: размером 0.

...