决定是否使用内部Parallel.For或Task
本文关键字:For Task Parallel 内部 是否 决定 | 更新日期: 2023-09-27 17:57:55
我正在开发一个应用程序,该应用程序基本上接受原始sql,执行它,将它导出为特定格式,然后压缩它并将其发布到文件共享中。
由于每个报告都是独立的,与下一个报告无关,并且托管应用程序的服务器机器将有足够的马力,所以我想利用Task库。我正在考虑使用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文件,最后将文件复制到remove共享(在云上)。这可能是一个很长的过程,我想知道我是否应该使用另一个Parallel.For here(对于每个文件)或使用一个Task。我还不太熟悉使用Task对象。
如有任何帮助,我们将不胜感激。
我认为并行foreach很好,但听起来你确实可以利用TPL数据流来利用你的机器。
您可以从这里开始:http://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx