如何确定异步http客户端在执行期间的并发请求数量?

8

我有一个简单的控制台应用程序,看起来像这样:

    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个异步网络请求,并在请求完成时收集响应代码并将它们列出。

  1. 问题:是否可以使用VS2012以这样的方式调试应用程序,以便我可以确定在执行期间正在进行的并发网络请求数量?

原因是我发现可以在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设置这个限制吗?


并不是说你现在做的有什么问题,但是提醒一下,HttpClient 可以自己进行多个并发调用 - 你不需要为 N 个不同的调用创建 N 个不同的实例。 - James Manning
@JamesManning 好的,我改成了字段。谢谢! - user17753
你的目标是通过编程来跟踪这个(例如,在用户界面中显示),还是仅仅验证预期的行为? - James Manning
1
澄清一下 - 如果只是为了查看行为,我会使用并信任 Fiddler 而不是应用程序内部的任何东西。 :) - James Manning
尝试查看可以发出多少个同时的GET请求,但我不知道这个限制是在哪里实施的。 - user17753
2个回答

2
使用VS2012调试应用程序时,是否有可能以这样的方式确定在执行过程中同时发生的Web请求数量?
是的,可以。使用并行任务并行堆栈窗口,它们非常好用。
服务器设置此限制吗?操作系统设置此限制吗?此应用程序配置和/或.NET设置此限制吗?
该设置指定与网络主机的最大连接数,可以在计算机或应用程序级别上设置。服务器也可以为客户端设置连接限制,但这与maxconnection属性无关。
在您的例子中,实际最大连接数也可能受线程池设置的限制。请查看此知识库条目以获取更多详细信息。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接