我有一个简单的控制台应用程序,可以从多个线程发送HTTP POST:
List<Task> tasks = new List<Task>();
for (int i = 0; i < 100; i++)
{
tasks.Add(Task.Factory.StartNew(() => SendQuery(url1, query1)));
tasks.Add(Task.Factory.StartNew(() => SendQuery(url2, query2)));
}
Task.WaitAll(tasks.ToArray());
SendQuery(string uri, string requestString)
看起来像这样:
Uri url = new Uri(uri);
try
{
using (HttpClient client = new HttpClient { Timeout = new TimeSpan(0, 0, 10, 0) })
{
StringContent content = new StringContent(requestString);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = client.PostAsync(url, content).Result;
response.EnsureSuccessStatusCode();
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
程序运行没有任何错误,最后处理所有查询,但在填写tasks
列表后,每个线程挂起client.PostAsync(url, content).Result
,几分钟后 IIS开始处理查询。为什么会出现这种延迟?这段时间发生了什么?我正在使用在Windows Server 2008 R2上运行的IIS 7.5来托管提供url1
和url2
的网络服务。
答案 0 :(得分:0)
在程序开始时将此值设置为500或1000,并告诉我们效果。 您的请求可能会受到默认值2的限制(取决于.net版本)
ServicePointManager.DefaultConnectionLimit = 500;