Craig
Craig

Reputation: 1776

What is the highest safe number for ServicePointManager.DefaultConnectionLimit in a .net core app?

I have a .net core api that must make around 150,000 calls to collect data from external services. I am running these requests in parallel using Parallel.forEach and that seems to be working great, however I get an error from the http client for around 100,000 of my requests!

The Operation was canceled

Looking back at this I wish I had also logged the exception type but I believe this is due to not having enough outgoing connection limit.

Through debugging I have found that this returns 2:

ServicePointManager.DefaultConnectionLimit

On the face of it, if this really is the maximum amount of open connections allowed to an external domain / server, I want to increase that as high as possible. Ideally to 150,000 to ensure parallel processing doesnt cause an issue.

The problem is I cant find any information on what a safe limit is, or how much load this will put on my machine - if it is even a lot. Since this issue causes a real request to be made my data provider counts it in my charges - but obviously I get nothing from it since the .net core framework is just throwing my result away..

Since this problem is also intermittent it can be difficult to debug and I would just like to set this value as high as is safe to do so on my local machine.

I believe this question is relevant to stackoverflow since it does deal directly with the technical issue above, whereas other questions I could find only ask details about what this setting is.

Upvotes: 2

Views: 1236

Answers (1)

Derviş Kayımbaşıoğlu
Derviş Kayımbaşıoğlu

Reputation: 30565

As far as I understand, you are trying to make 150000 simulatenous request to external services. I presume that your services are Restful web services. If that is the case when you set DefaultConnectionLimit to an arbitrary number (very high), every single request opens a port for requesting data. This definitely clogs your network and your ports (port range is 0 to 65535).

Besides, making 150000 request without using throttling uncontrollably consumes your OS resources.

DefaultConnectionLimit is there because it protects you from aforementioned problems.

you may consider to use SemaphoreSlim for throttling

Upvotes: 4

Related Questions