线程化web服务调用的最佳技术
本文关键字:最佳 技术 调用 服务 web 线程 | 更新日期: 2023-09-27 18:17:23
我有一个网站,需要调用web服务1到10,000次。目前这是在foreach循环中完成的,像这样:
List<Address> addresses
List<Response> responses = new List<Response>();
foreach(Address address in addresses){
//Setup web service call
//Call web service
//Parse response into object for front end
responses.Add(CustomReponseObject)
}
// The responses object is then just serialized and set to the front end client to parse through.
当前的方法不是线程,我想加快它。不确定我是否应该使用托管线程或使用新的Async Await关键字。
我开始这个过程,然后挂了如果新的Async关键字可能工作,使用响应列表上的锁,或者如果像ConcurrentBag这样的东西可能需要?我已经通读了所有三个选项,但不确定哪个选项最适合我的用例?
您应该使用async/await,因为它将在等待调用web服务的IO操作完成时最大限度地减少托管线程的使用。
在MSDN上有一个完整的例子显示了这个确切的模式。
至于容器,如果坚持使用List<T>
,则必须在每个线程添加时通过锁来控制对列表的访问,因为该类在修改时不是线程安全的(多个线程可以并发读取)。
一个更好的选择是ConcurrentQueue<T>
,因为它针对这种读/写模式进行了优化(感谢@Scott的观察)。