我具有从多个线程发送HTTP POST一个简单的控制台应用:HttpClient的POST长上IIS请求处理之前延迟,多线程
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开始处理eries。为什么会出现这种延迟?在这段时间发生了什么?我使用在Windows Server 2008 R2上运行的IIS 7.5来托管提供url1
和url2
的网络服务。
传递的HttpClient的一个实例为您SendQuery方法,或HttpClient的实例字段。重用HttpClient实例更有效。 –
如果您将SendQuery方法设置为异步,而不是为每个请求创建一个全新的线程,它也会更加高效。 –