8

Ich habe eine einfache Konsolenanwendung, die wie folgt aussieht:Wie ermittle ich die Anzahl gleichzeitiger Anfragen von einem asynchronen httpclient während der Ausführung?

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(); 
    } 

Hier sie, dass ich initiieren 10 asynchrone Web-Anfragen und sammeln Sie die Antwortcodes, wenn die Anforderungen abgeschlossen und in der Liste sind.

  1. Frage: Ist es möglich, VS2012 zu verwenden, um die App so zu debuggen, wo ich die Anzahl der gleichzeitigen Web-Anfragen ermitteln kann, die während der Ausführung zu einem bestimmten Punkt passiert sind?

Grund dafür ist, fand ich heraus, gibt es etwas, das Sie auf dem App.config ändern können:

<?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> 

Aber ich habe kein guter Weg, um zu bestimmen, ob dies tatsächlich funktioniert oder nicht.

  1. Setzen Server diese Grenze?

  2. Legt das Betriebssystem diese Grenze fest?

  3. Legt diese App-Konfiguration und/oder .NET diese Grenze fest?

+0

Nicht, dass irgendetwas mit dem, was Sie jetzt tun, falsch ist, aber nur zur Info, der HttpClient kann für mehrere gleichzeitige Anrufe allein verwendet werden - Sie müssen nicht N verschiedene Instanzen davon für N verschiedene Anrufe haben. –

+0

@JamesManning OK, ich habe es stattdessen ein Feld gemacht. Vielen Dank! – user17753

+0

Ist es Ihr Ziel, dies programmatisch zu verfolgen (z. B. für die Anzeige in einer Benutzeroberfläche) oder nur um das erwartete Verhalten zu überprüfen? –

Antwort

2

Ist es möglich, VS2012 zu verwenden, um die App so zu debuggen, wo ich kann die Anzahl gleichzeitiger Web-Anfragen bestimmen, die zu einem bestimmten Zeitpunkt während der Ausführung geschehen?

Ja, sicher. Verwenden Sie Parallel Tasks und Parallel Stacks Windows, sie sind sehr gut.

  1. Setzen Server diese Grenze?

  2. Legt das Betriebssystem diese Grenze fest?

  3. Legt diese App-Konfiguration und/oder .NET diese Grenze fest?

Die Einstellung gibt the maximum number of connections to a network host und kann an der Maschine oder auf Anwendungsebene eingestellt werden. Ein Server könnte auch ein Verbindungslimit für die Clients festlegen, aber das ist nicht mit dem Attribut verbunden.

In Ihrem Beispiel kann die tatsächliche maximale Anzahl von Verbindungen auch durch Thread-Pool-Einstellungen begrenzt werden. Weitere Informationen finden Sie unter this KB entry.

Verwandte Themen