0

WebClientインターネット上の Web サーバーから同時に非同期で多くの小さなファイルをダウンロードするために、クラスの複数のインスタンスを使用しています。
私が使用している URI は、不要な DNS 解決を避けるために IP を番号表記にしています。

クラスの 50 以上のインスタンスを同時に使用して、少しプッシュしています。

私が気付いたのは、ほとんどのファイルが正しくダウンロードされているにもかかわらず、ごく一部のファイルの長さが 0 であるということです。これは、おそらくエラーが原因で、スレッドが正常に完了しなかったことを意味します。
ただし、AsyncCompletedEventArgsエラーは報告されませんでした。

押しすぎですか?しかし、繰り返しになりますが、エラーを発生させるべきではありませんか?

4

1 に答える 1

1

誰かがこの非常に古い質問に答えた場合、ダウンロードが完了する前にスレッドが強制終了され、ファイルのサイズが 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");
        }
    }
}

2 番目のケースでは、ダウンロードが開始されるとすぐに、プログラムが終了し、ダウンロードが中断されます。これは、C: ドライブにサイズ 0 のファイルが作成されることによって示されます。

于 2016-02-09T22:14:57.513 に答える