相关疑难解决方法(0)

HttpClient可以安全地同时使用吗?

在我可以找到的所有示例中HttpClient,它用于一次性呼叫.但是,如果我有一个持久的客户端情况,可以同时进行多个请求怎么办?基本上,client.PostAsync对同一个实例一次调用2个线程是安全的HttpClient.

我不是在寻找实验结果.作为一个工作示例可能只是一个侥幸(并且持久的),一个失败的例子可能是一个错误的配置问题.理想情况下,我正在寻找HttpClient中并发处理问题的一些权威答案.

.net concurrency c#-4.0 dotnet-httpclient

147
推荐指数
3
解决办法
6万
查看次数

如何尽快有效地发出数千个Web请求

我需要从C#控制台应用程序发出100,000个轻量级(即小的Content-Length)Web请求。我这样做的最快方法是什么(即在最短的时间内完成所有请求),我应该遵循哪些最佳实践?我无法解雇并忘记,因为我需要捕获响应。

大概我想使用asyncWeb请求方法,但是我想知道存储所有Task连续和编组的开销会产生什么影响。

内存消耗不是一个整体问题,目标是速度。

大概我也想利用所有可用的内核。

所以我可以做这样的事情:

Parallel.ForEach(iterations, i =>
{
    var response = await MakeRequest(i);
    // do thing with response
});
Run Code Online (Sandbox Code Playgroud)

但这不会让我比内核数量更快...

我可以:

Parallel.ForEach(iterations, i =>
{
    var response = MakeRequest(i);
    response.GetAwaiter().OnCompleted(() =>
    {
        // do thing with response
    });
});
Run Code Online (Sandbox Code Playgroud)

但是如何使我的程序在ForEach。握住所有TasksWhenAll荷兰国际集团他们觉得胀,是否有任何现有的模式或佣工有某种任务队列?

有什么方法可以使情况变得更好,如何处理节流/错误检测?例如,如果远程端点响应缓慢,我不想继续向其发送垃圾邮件

我了解我也需要这样做:

ServicePointManager.DefaultConnectionLimit = int.MaxValue
Run Code Online (Sandbox Code Playgroud)

还有什么需要的吗?

c# concurrency asynchronous

5
推荐指数
1
解决办法
414
查看次数

标签 统计

concurrency ×2

.net ×1

asynchronous ×1

c# ×1

c#-4.0 ×1

dotnet-httpclient ×1