我经常发现自己正在运行并行Web请求,并发现网络连接可以处理最大量的并行请求,因此设置MaxDegreeOfParallelism并运行parallel.for循环,例如:

Dim maxThreads As Integer = 20 'pre tested optimum amount that wont overload network
Parallel.For(0, items.Count, New ParallelOptions With {.MaxDegreeOfParallelism = maxThreads}, Sub(i)
    'network stuff
    'eg Dim source As String = New Net.WebClient.DownloadString(items(i)) etc
    End Sub

由于网络任务很难完成,因此线程计数总是上升到最大设置,因此通过将线程池最小线程设置为相同的数量(maxThreads)来启动它是有意义的 .

这工作正常,并且很好且可读,但我想知道是否有更好的实现,或者这种方法是否存在一些固有的缺陷 .

.Net 4.5引入了一些很棒的异步支持,但不幸的是我只限于.net 4.任何指针都赞赏,是的,这是vb.net,但c#答案很好 .