Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载文件超时_C#_.net_Httpwebrequest - Fatal编程技术网

C# 下载文件超时

C# 下载文件超时,c#,.net,httpwebrequest,C#,.net,Httpwebrequest,我正试图从网页上下载html,但我想在10秒钟后放弃。下面的代码可以很好地下载文本,但可能需要10秒以上的时间。我设置了超时,但流读取需要很长时间。在10秒后停止任何进一步处理,同时仍关闭连接的最佳方法是什么 如果req.GetResponse()花费的时间超过10秒,我会得到一个WebException,但是wr.GetResponseStream()读取需要时间。我还想确保所有连接都正确关闭 代码: 样本输出: A: 20:04:36:522 B: 20:04:36:522 C: 20

我正试图从网页上下载html,但我想在10秒钟后放弃。下面的代码可以很好地下载文本,但可能需要10秒以上的时间。我设置了超时,但流读取需要很长时间。在10秒后停止任何进一步处理,同时仍关闭连接的最佳方法是什么

如果req.GetResponse()花费的时间超过10秒,我会得到一个WebException,但是wr.GetResponseStream()读取需要时间。我还想确保所有连接都正确关闭

代码:

样本输出:

A:  20:04:36:522
B:  20:04:36:522
C:  20:04:54:337

Elapsed Time: ~18 Seconds

时间消耗在
ReadToEnd

使用

将count设置为4000,即使是最慢的连接也应该有足够的带宽,几乎可以在瞬间提供4000个字符或8kB

确保在每次读取之间增加缓冲区的索引,或者您可以使用8kB缓冲区,并在每次迭代中将其内容添加到动态缓冲区中

在循环中使用
Read
检查时间,如果大于超时则退出,如果
Read
返回的值小于count则退出


此外,您可能希望研究异步传输,这是从网络获取数据的正确方法:

+1这正是我在阅读问题时所想的。使用缓冲区。这正是我最终要做的;谢谢,我现在发现关闭HttpWebRequest占用了大部分时间。我调用req.Abort(),需要5到20秒的时间。请不要在标题前加上“C:”之类的前缀。这就是标签的用途。
A:  20:04:36:522
B:  20:04:36:522
C:  20:04:54:337

Elapsed Time: ~18 Seconds
public virtual int Read(
    char[] buffer,
    int index,
    int count
)