簡體   English   中英

如何使用Async HttpClient C#限制連接

[英]How to limit connections with Async HttpClient C#

我試圖限制到端點的最大連接數,我通過設置ServicePointManager.DefaultConnectionLimit來做到這一點,但它不起作用。 為了測試這一點,我設置了一個休眠5秒然后返回的端點。

這是我的代碼:

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

以下是輸出:

Done
Done
Done
Elapsed Time For HttpClient: 00:00:05.0953943
Done
Done
Done
Elapsed Time For WebClient: 00:00:15.0450096

如您所見,異步HttpClient不受最大連接數1的限制,因為並行進行3個調用需要5秒,而異步WebClient受到1連接的限制是因為並行進行3個調用需要15秒。

我的問題是...如何使用異步HttpClient限制最大連接數?

謝謝。

對所有請求使用相同的HttpClient實例,連接限制將按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM