8

Ho una semplice applicazione console che assomiglia a questo:Come determinare il numero di richieste simultanee da un httpclient asincrono durante l'esecuzione?

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

Qui ho iniziato 10 richieste asincrone web e raccogliere i codici di risposta quando le richieste sono completate e li elenco.

  1. Domanda: E 'possibile utilizzare VS2012 per eseguire il debug l'applicazione in modo in cui è possibile determinare il numero di richieste simultanee web che stanno accadendo in un qualsiasi punto durante l'esecuzione?

motivo è che ho scoperto che c'è qualcosa che si può cambiare il 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> 

Ma, io non ho un buon modo per determinare se questo è in realtà di lavoro o meno.

  1. I server hanno impostato questo limite?

  2. Il sistema operativo ha impostato questo limite?

  3. Questa configurazione di app e/o .NET ha fissato questo limite?

+0

non è che ci sia qualcosa di sbagliato in quello che stai facendo ora, ma solo FYI, HttpClient può essere utilizzato per più chiamate simultanee da solo - non è necessario avere N diverse istanze di esso per N diverse chiamate. –

+0

@JamesManning OK, ho fatto un campo invece. Grazie! – user17753

+0

Il tuo obiettivo è di tenere traccia di questo in modo programmatico (ad esempio, per la visualizzazione in un'interfaccia utente) o semplicemente per verificare il comportamento previsto? –

risposta

2

E 'possibile utilizzare VS2012 per eseguire il debug l'applicazione in modo in cui ho possibile determinare il numero di richieste simultanee web che stanno accadendo in un qualsiasi punto durante l'esecuzione?

Sì, sicuramente. Usa le finestre Parallel Tasks e Parallel Stacks, sono molto buone.

  1. Do server impostare questo limite?

  2. Il sistema operativo ha impostato questo limite?

  3. Questa configurazione di app e/o .NET ha fissato questo limite?

L'impostazione specifica the maximum number of connections to a network host e può essere impostato sul livello macchina o applicazione. Un server può impostare un limite di connessione anche per i client ma non è correlato all'attributo maxconnection.

Nell'esempio, il numero massimo effettivo di connessioni può anche essere limitato dalle impostazioni del pool di thread. Dai un'occhiata a this KB entry per maggiori dettagli.

Problemi correlati