我在大约一年前看到了这些问题Recommendations for executing .NET HttpWebRequests in parallel in ASP.NET和Async.Parallel or Array.Parallel.Map,并且想知道他们的建议是否仍然存在,或者现在是否有更好的方法Task Parallel Library。
我的情况更接近第二个问题,除了我只需要打10个(不是)不同的网络服务而不是同一个3000次。由于这是一个Web应用程序,这种请求放大是否会改变建议的方法?有更好的方法吗?我可以期待这样的事情随着用户数量的增加而扩展吗?
一些注意事项:
string
并返回string
s的集合答案 0 :(得分:3)
Web请求不适合TPL,因为它们是IO,而不是处理。自.Net 2.0以来,您已经拥有了所有必要的基础架构:BeginGetResponse
和BeginGetResponseStream
。密切关注未完成请求的数量(~200是一个很好的消费者操作系统,〜2000是服务器风格,相应调整TCP参数后,特别是TcpNumConnections
)并确保调整ServicePointManager.DefaultConnectionLimit
通过简单地通过TPL对数十个和数百个任务执行同步IO调用来尝试实现高规模和高带宽/吞吐量将使您无法快速完成。
答案 1 :(得分:3)
您可能会发现此讨论相关:Async instead of Parallel