一般情况下,这听起来像是基于async
/await
关键字很可能是最好的选择,原因有两个语言:
鉴于这是一个Web服务调用,它将自然是IO绑定和异步的。使用TPL或其他例程(无需注意)可能会降低整体吞吐量。一般来说,如果你从一开始就以这种方式对待它们,你希望这些操作保持异步,并且能够扩展最佳效果。每个操作完成后
- 一个DataGridView绑定到类和更新一些的BindingList /的ObservableCollection
- 也有可能是一个状态标签通知许多项目已完成怎样的用户。
既然你要绑定UI控件的效果,地图async
/await
支持回调到调用同步上下文将简化添加结果到您的收藏。这将保持代码在最终状态下非常简单。
请注意,您可能希望存储由异步操作返回的Task<T>
,然后等待返回的值(不只是直接等待消息调用)。这将允许您同时向服务发出多个请求。例如,你的代码可能会看起来像(*无异常处理等):
// Start each operation, and store in a list
var asyncOperations = ids.Select(id => FetchDataFromWebServiceAsync(id)).ToList();
while (asyncOperations.Any())
{
// When one operation completes, remove it from the list of ops running
var completed = await Task.WhenAny(asyncOperations);
asyncOperations.Remove(completed);
// Grab the result and use
YourResultType finished = completed.Result;
// Add to UI, update progress, etc...
}
+1,这将是新的'async'功能 –
的使用性能优异不幸的是我的约束是.NET 3.5。抱歉。我应该把它放在OP中。 – sk099
@StephenKnoth使用异步调用仍然是最好的,但这将是一个很大的工作。 –