我正在开发一个基本上采用原始sql,执行它,将其导出为某种格式,并将其压缩并将其发布到文件共享的应用程序。
由于每个报告都是独立的,与下一个报告无关,托管应用程序的服务器机器将具有足够的马力,我想利用任务库。我正在考虑使用Parallel.For来枚举我的报告请求集合,以便可以在不同的线程上处理它们:
Parallel.ForEach(DataAccessFactory().GetPendingReportRequests(), req =>
{
ILogger log = Log.ForContext("Report ID", req.Id);
try
{
log.Information("Starting Work");
new ReportWorker(DataAccessFactory(), ZipPackageFactory(), FileSystemFactory()).Run(req);
}
catch (Exception ex)
{
log.Error(ex.Message);
}
finally
{
log.Information("Ending Work");
}
}
);
ReportWorker类中发生的最后一个处理步骤是将数据导出到excel(或csv),压缩每个zip文件,最后将文件复制到删除共享(在云上)。这可能是一个长度过程,我想知道我是否应该使用另一个Parallel.For这里(对于每个文件)或使用任务。我还不太熟悉使用Task对象。
非常感谢任何帮助。
答案 0 :(得分:0)
我认为并行foreach很好,但听起来你可以利用TPL Dataflow的机器。
您可以在此处开始:http://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx