我正在使用WebClient
类的多个实例,以便从互联网上的Web服务器异步下载许多小文件。
我正在使用的URI具有数字表示法的IP,以避免不必要的DNS解析。
我正在推动它,使用例如同时有50多个班级实例。
我注意到虽然大多数文件都是正确下载的,但是其中一小部分文件的长度为0,这意味着线程从未成功完成 - 可能是由于错误。
但是,AsyncCompletedEventArgs
从未报告错误。
我推得太多了吗?但话说回来,不应该发出错误吗?
答案 0 :(得分: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");
}
}
}
在第二种情况下,一旦下载开始,程序就会退出,导致下载中断,这可以通过在大小为0的C:驱动器上创建的文件来体现。