决定是否使用内部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对象。

如有任何帮助,我们将不胜感激。

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

我认为并行foreach很好,但听起来你确实可以利用TPL数据流来利用你的机器。

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