8

我有一个简单的控制台应用程序,它看起来是这样的:如何在执行期间确定来自异步httpclient的并发请求数?

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请求,并收集响应代码时请求已完成,并列出它们。

  1. 问题:是否可以使用VS2012调试应用程序以这样的方式,我可以确定在执行过程中的任意一点发生的并发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> 

但是,我还没有确定是否这实际上是工作或没有一个很好的方法。

  1. 服务器是否设置了此限制?

  2. 操作系统是否设置此限制?

  3. 此应用程序配置和/或.NET设置此限制?

+0

不是说你现在正在做什么有什么问题,而是仅供参考,HttpClient可以用于多个并发呼叫 - 你不需要为N个不同的呼叫提供N个不同的实例。 –

+0

@JamesManning好吧,我把它变成了一个领域。谢谢! – user17753

+0

您的目标是以编程方式跟踪此(例如,用于在UI中显示)还是仅用于验证预期的行为? –

回答

2

是否有可能使用VS2012调试应用程序以这样的方式,我 可以确定在执行过程中的任何一点发生 当前Web请求的数量?

是的,当然。使用Parallel TasksParallel Stacks窗口,它们非常好。

  1. 不要服务器设置此限制?

  2. 操作系统是否设置此限制?

  3. 此应用程序配置和/或.NET设置此限制?

设置规定the maximum number of connections to a network host,并且可以在该机器或应用级进行设置。服务器也可以为客户端设置连接限制,但这与maxconnection属性无关。

在您的示例中,实际的最大连接数也可以由线程池设置来限制。有关详细信息,请参阅this KB entry

相关问题