从另一个线程调用时,C#HttpWebRequest.GetResponse会阻塞

时间:2018-03-13 20:29:15

标签: c# concurrency httpwebrequest deadlock

当我试图在任务中调用多个Web请求时,我只是遇到了问题。这是我的代码

private static void Main(string[] args)
    {
        var locker = new object();
        var bag = new ConcurrentBag<string>();
        var list = new List<Task>();

        for (var i = 0; i < 5000; i++)
        {
            var task = Task.Run(() =>
            {
                lock (locker)
                {
                    using (var client = new WebClient())
                    {
                        Console.WriteLine("get");
                        var s = client.DownloadString("http://www.google.de");
                        bag.Add(s);
                        Console.WriteLine("got");
                    }
                }
            });
            list.Add(task);
        }

        Task.WaitAll(list.ToArray());
    }

似乎第一个请求阻止并且永远不会返回。 由于引入了锁,一次只发送一个请求。 所以没有发送任何parellel请求。

有人知道如何避免这种情况吗? 线程在此处阻止:CallStack

0 个答案:

没有答案