如果您可以使用 C# 5.0,那么async
-await
可以帮助您。WCF 服务的代码生成器支持async
- await
,因此它可以生成方法的异步版本,这将很有用。
您要做的是异步启动所有请求,并将Task
它们返回的 s 存储在一个集合中。然后,在Task
完成时处理 s。.Net 不支持开箱即用,但您可以使用Stephen Toub 的Interleaved()
方法:
var tasks = new List<Task<DataAboutItem>>();
foreach (var item in items)
{
// don't await here yet
Task<DataAboutItem> dataAboutItemTask = MethodThatCallsWCFServiceAsync(item);
tasks.Add(dataAboutItemTask);
}
foreach (var bucket in Interleaved(tasks))
{
var dataAboutItemTask = await bucket;
DataAboutItem dataAboutItem = await dataAboutItemTask;
// Do work to update UI
}
如果您想限制调用 WCF 服务(例如,一次只发出 10 个请求),您可以改用 TPL 数据流,指定MaxDegreeOfParallelism
.