现有第三方Rest API可用,它将接受一组输入并返回相应的输出。(可以将其视为必应的地理编码服务,该服务将接受地址并返回位置详细信息)
我的需求是为单个asp.net请求调用此API多次(例如500-1000次),每次调用可能需要接近500毫秒才能返回。
我能想到三种方法来执行此操作。需要您的意见,以速度为标准选择最佳方法。
1. 在for循环中使用Http请求
编写一个简单的for循环,对于每个输入调用REST API并将输出添加到结果中。这可能是最慢的方法。但没有线程或上下文切换的开销。
2. 使用async和await
使用async和await机制调用REST Api。这样可以提高效率,因为线程在等待REST调用返回时可以继续执行其他活动。我面临的问题是,按照建议,我应该一直使用await到最顶层的调用者,但在我的情况下不可能做到。不遵循这个建议可能会导致asp.net中的死锁,如此处所述http://msdn.microsoft.com/en-us/magazine/jj991977.aspx 3.使用Task Parallel Library使用Parallel.ForEach并使用同步API并行调用服务器,并使用ConcurrentDictionary保存结果。但可能会导致线程开销。
另外,请让我知道是否有其他更好的处理方法。我明白人们可能建议跟踪每种方法的性能,但想了解人们在解决这个问题之前是如何解决的。