Sounds like threadpool starvation. There simply aren't enough threads.
But you have to ask, does it makes sense to have 2000 concurrent network operations? I would think without some sort of offloading arrangement that'd be enough to grind the CPU to a standstill just in the kernel, before you even get to your code. Maybe, depending on the flow of traffic.
Two ways to go. You could try to increase the number of threads in the threadpool but I find this idea quite scary.
The better approach would be to switch to asynchronous IO. The idea here is that you don't have threads which are blocked waiting for network activity. Instead the thread starts the network operation and then gets reused to do other stuff until such time that the response comes back which will then be handled by a different thread.
If you think about it, a network connection is an abstraction - what really happens is flows of packets of data out of and into your adapter.
Have a look at Port Completion threading. Use Begin/End methods and callbacks to implement the actual SNMP part.