C# Http上的下载线程直接从字节读取循环退出
我有一个通过Http使用多线程下载的项目。它下载部分内容 对于某些URL和低下载速度,一些部分下载线程在while循环上等待太多时间而没有获取数据,并且在几次之后,线程直接退出而没有在while循环后执行代码。我不明白怎么会这样 我的代码: 在这段代码中,每个下载线程都必须在最后一行执行Debug.WriteLine代码,但其中一些线程不执行它。输出显示C# Http上的下载线程直接从字节读取循环退出,c#,multithreading,download,httpwebresponse,C#,Multithreading,Download,Httpwebresponse,我有一个通过Http使用多线程下载的项目。它下载部分内容 对于某些URL和低下载速度,一些部分下载线程在while循环上等待太多时间而没有获取数据,并且在几次之后,线程直接退出而没有在while循环后执行代码。我不明白怎么会这样 我的代码: 在这段代码中,每个下载线程都必须在最后一行执行Debug.WriteLine代码,但其中一些线程不执行它。输出显示线程0x。。。已退出,代码为259(0x103)。用于每个线程,但不写入每个线程的线程退出 输出: 下载状态 如您所见,一些下载线程会停止并
线程0x。。。已退出,代码为259(0x103)。
用于每个线程,但不写入每个线程的线程退出
输出:
下载状态
如您所见,一些下载线程会停止并直接退出。这个问题的原因是什么
更新:
try
{
while ((bytesRead = tempStream.Read(buffer, 0, buffer.Length)) > 0)
{
//....
file.Write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
}
}
catch
{
//Refresh the connection
}
线程创建:
public void Start()
{
任务th=新任务(()=>
{
createFirstPartitions();
});
th.Start();
}
void createFirstPartitions()
{
size=Helper.GetContentLength(url,ref-rangeAllowed,ref-url);
对于(int i=0;i
我已经为我的问题找到了一个简单的答案。解决方案是使用HttpWebRequest.ReadWriteTimeout
。默认情况下,其值为5分钟。将其设置为可接受的时间是一个很好的解决方案
发送请求时添加req.ReadWriteTimeout=5000
然后将代码部分更改为:
try
{
while ((bytesRead = tempStream.Read(buffer, 0, buffer.Length)) > 0)
{
//....
file.Write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
}
}
catch
{
//Refresh the connection
}
您的线程以非零退出代码退出(即出现错误,可能是由于异常)。输出窗口告诉您什么?这些是在代码中创建的下载线程。前七个线程成功,其他线程未成功。输出还显示程序'[3988]多线程Downloder.vshost.exe:程序跟踪'已退出,代码为0(0x0)。
程序'[3988]多线程Downloder.vshost.exe'已退出,代码为0(0x0)。
此外,您还没有向我们显示线程部分。。。from
和to
来自哪里?和等待
?我已经更新了我的问题wait
是一个简单的变量,它可以帮助我等待线程几毫秒,以保持其变量不变,直到某些操作完成from
和to
是为创建部分内容而计算的范围变量。
try
{
while ((bytesRead = tempStream.Read(buffer, 0, buffer.Length)) > 0)
{
//....
file.Write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
}
}
catch
{
//Refresh the connection
}