【发布时间】:2015-03-12 07:35:20
【问题描述】:
我有一个 mvc5 控制器,它使用两个分页的远程数据服务。这两个服务必须串联调用——当从serviceA返回一页数据时,它必须发送给serviceB。我幼稚的完全串行实现如下所示:
var pageNumber = 1;
var totalPages = x;
var results = new List<ProcessedResult>();
do {
// Get results from service A.
var initialResults = await serviceA.GetDataPageAsync(pageNumber);
// Send serviceA's results to service B
var processedResults = await serviceB.ProcessAsync(initialResults );
// Save this iteration's results to our result collection.
results.AddRange(processedResults);
//Report our progress so far
ReportProgress((float)(pageNumber/totalPages)*100);
} while (pageNumber<totalPages);
return View(results)
如何开始并行(或异步)查询“页面”而不中断延续(每个页面的 serviceB 都遵循 serviceA)或进度报告?谢谢。
【问题讨论】:
-
将循环体提取到一个单独的
async函数中,为每个页面调用一次,收集结果任务和WaitAll或WhenAll。至于报告,不要发送百分比,发送增量,让ReportProgress函数计算百分比
标签: c# asynchronous parallel-processing asp.net-mvc-5 task-parallel-library