我经常发现自己在运行并行网络请求,并且发现网络连接可以处理的并行请求数量是最大的,所以设置 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# 的答案很好。