多个WebRequest到相同的资源相互阻塞?

时间:2014-03-17 17:14:24

标签: c# blocking webresponse

所以我有多个线程试图从资源获得响应,但由于某种原因 - 即使它们在单独的线程中运行,每个响应只会在所有其他响应仍在等待或关闭时返回。我试过用 WebResponse response = await request.GetResponseAsync();但首先这对我来说似乎是多余的,因为我已经在运行单独的线程,而且visual studio告诉我

  

等待'运算符只能在异步方法中使用。考虑使用' async'标记此方法。修饰符并将其返回类型更改为'任务'。

这里发生了什么?

编辑(代码):

启动方法(从单个线程调用)

public void Start()
{
    if (!Started)
    {
        ByteAt = 0;
        request = (HttpWebRequest)WebRequest.Create(URL);
        request.Method = "GET";
        request.AddRange(ByteStart, ByteStart + ByteLength);
        downloadThread = new Thread(DownloadThreadWorker);
        downloadThread.Start();
        Started = true;
        Paused = false;
    }
}

下载主题:

private void DownloadThreadWorker()
        {
            WebResponse response = request.GetResponse();
            if (response != null)
            {
                if (!CheckRange(response))
                    Abort(String.Format("Multi part downloads not supported (Requested length: {0}, response length: {1})", ByteLength, response.ContentLength));
                else
                { ...

1 个答案:

答案 0 :(得分:0)

根据HTTP 1.1 RFC,客户端应该不超过2个并发连接。不确定IE的最新版本,但以前的IE很荣幸这个限制(可以通过注册表项更改),并且在任何时候只有不超过2个连接到同一主机。这可能是您遇到的限制......

或尝试将ServicePointManager.DefaultConnectionLimit设置为高于2.