决定是否使用内部Parallel.For或Task

时间:2014-04-10 14:03:23

标签: c# .net multithreading task-parallel-library parallel.foreach

我正在开发一个基本上采用原始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对象。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为并行foreach很好,但听起来你可以利用TPL Dataflow的机器。

您可以在此处开始:http://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx