我有一个简单的控制台应用程序,如下所示:
private static StringBuilder sb = new StringBuilder();
private static HttpClient client = new HttpClient();
private static async Task<HttpStatusCode> AccessTheWebAsync()
{
HttpResponseMessage response = await client.GetAsync("http://www.google.com").ConfigureAwait(false);
return response.StatusCode;
}
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
tasks.Add(AccessTheWebAsync());
Task.WaitAll(tasks.ToArray());
foreach (Task<HttpStatusCode> t in tasks)
sb.Append((int)t.Result).Append(Environment.NewLine);
Console.WriteLine(sb.ToString());
sw.Stop();
Console.WriteLine("Run Completed, Time elapsed: {0}", sw.Elapsed);
Console.ReadLine();
}
在这里,我发起10个异步Web请求,并在请求完成时收集响应代码并列出它们。
原因是我发现你可以在App.config
上找到一些东西:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "10" />
</connectionManagement>
</system.net>
</configuration>
但是,我不是一个很好的方法来确定这是否真的有效。
服务器是否设置此限制?
操作系统是否设置了此限制?
此应用配置和/或.NET是否设置此限制?
答案 0 :(得分:2)
是否可以使用VS2012以我这样的方式调试应用程序 可以确定正在发生的并发Web请求的数量 在执行期间的任何给定点?
是的,当然。使用Parallel Tasks和Parallel Stacks窗口,它们非常好。
服务器是否设置此限制?
操作系统是否设置了此限制?
- 醇>
此应用配置和/或.NET是否设置此限制?
该设置指定the maximum number of connections to a network host,可以在机器或应用程序级别设置。服务器也可以为客户端设置连接限制,但这与maxconnection
属性无关。
在您的示例中,实际的最大连接数也可以受到线程池设置的限制。有关详细信息,请查看this KB entry。
答案 1 :(得分:0)
使用静态int变量并使用Interlock Increment / Decrement。 http://msdn.microsoft.com/de-de/library/vstudio/dd78zt0c.aspx