我正在尝试限制与端点之间的最大连接数,我通过设置 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 实例,连接限制将按预期工作。
关于c# - 如何限制与 Async HttpClient C# 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904719/