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 个异步 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 是否设置了此限制?

4

2 回答 2

2

是否可以使用 VS2012 来调试应用程序,以便我可以确定在执行期间任何给定点发生的并发 Web 请求的数量?

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

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

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

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

该设置指定与网络主机的最大连接数,可以在机器或应用程序级别进行设置。maxconnection服务器也可以为客户端设置连接限制,但这与属性无关。

在您的示例中,实际最大连接数也可能受到线程池设置的限制。查看此 KB 条目以了解更多详细信息。

于 2012-11-20T21:58:55.030 回答
0

使用静态 int 变量并使用互锁增量/减量。 http://msdn.microsoft.com/de-de/library/vstudio/dd78zt0c.aspx

于 2012-11-16T17:53:15.233 回答