J'essaie de limiter le nombre de connexions max que j'ai à un point de terminaison et je le fais en définissant ServicePointManager.DefaultConnectionLimit mais cela ne fonctionne pas. Pour tester cela, j'ai mis en place un point de terminaison qui dort pendant 5 secondes, puis revient.Comment limiter les connexions avec Async HttpClient C#
Voici mon code:
class Program
{
private static Uri uri = new Uri("http://myservice.com?sleepForMillisecond=5000"));
static void Main(string[] args)
{
ServicePointManager.DefaultConnectionLimit = 1;
MainAsync().Wait();
}
static async Task MainAsync()
{
var watch = Stopwatch.StartNew();
var tasks = new List<Task>()
{
Task.Run(async() => await MakeCallWithHttpClient()),
Task.Run(async() => await MakeCallWithHttpClient()),
Task.Run(async() => await MakeCallWithHttpClient())
};
await Task.WhenAll(tasks);
watch.Stop();
Console.WriteLine("Elapsed Time For HttpClient: " + watch.Elapsed);
watch.Restart();
tasks = new List<Task>()
{
Task.Run(async() => await MakeCallWithWebClient()),
Task.Run(async() => await MakeCallWithWebClient()),
Task.Run(async() => await MakeCallWithWebClient())
};
await Task.WhenAll(tasks);
watch.Stop();
Console.WriteLine("Elapsed Time For WebClient: " + watch.Elapsed);
Console.WriteLine("Press Enter To Exit.");
Console.ReadLine();
}
private static async Task MakeCallWithHttpClient()
{
var client = new HttpClient();
await client.GetStringAsync(uri);
Console.WriteLine("Done");
}
private static async Task MakeCallWithWebClient()
{
var client = new WebClient();
await client.DownloadStringTaskAsync(uri);
Console.WriteLine("Done");
}
}
Voici la sortie:
Done
Done
Done
Elapsed Time For HttpClient: 00:00:05.0953943
Done
Done
Done
Elapsed Time For WebClient: 00:00:15.0450096
Comme vous pouvez le voir le async HttpClient est pas limité par les connexions max de 1 depuis qu'il a fait 3 appels en parallèle prend 5 secondes et le WebClient asynchrone est limité par la connexion 1 car effectuer 3 appels en parallèle prend 15 secondes.
Ma question est ... Comment limiter les connexions max en utilisant le client HTTP asynchrone?
Merci.
Pour devenir éclairé avoir une lecture de cet intéressant poste SO ... http://stackoverflow.com/questions/16194054/is-async-httpclient-from-net-4-5-a-bad-choice-for -intensif-charger-applications async ou multithread? –