在foreach循环中创建的同一线程正在执行多次

时间:2018-07-27 06:13:32

标签: c# multithreading model-view-controller foreach threadpool

我正在循环中的foreach报告列表内创建线程。创建的每个线程都将调用其DLL,在该DLL中将报告数据插入数据库。问题是创建的每个线程都执行多次插入重复的数据。 如何避免在foreach循环中重复执行同一线程?

下面是我的代码:   每个报告都通过线程传递以调用DLL方法

if($('...').hasClass('content')) {
    $('...').addClass('title').removeClass('content');    
}

if($('...').hasClass('title')) {
    $('...').addClass('content').removeClass('title');    
}

以下是为其中一个报告编写的日志:如下所示,同一线程[45]在2018-07-27 13:35:05,781同时执行两次。这是在数据库中创建重复数据。

  

2018-07-27 13:35:05,781 [45] DEBUG ReportGeneric.GenericReportBase-----开始阅读:IvrHostTransactionReport从20180727 133005到20180727 133505:

     

2018-07-27 13:35:05,781 [45]调试IvrHostTransactionReport.IvrHostTransactionReport-----开始从SP中获取数据:从20180727 133005到20180727 133505的IvrHostTransactionReport:

     

2018-07-27 13:35:05,781 [42] DEBUG ReportGeneric.GenericReportBase-----开始阅读:从20180727 133005到20180727 133505的ChatInteractionReport:

     

2018-07-27 13:35:05,781 [42]调试ChatInteractionReport.ChatInteractionReport-----从SP中获取数据:从20180727 133005到20180727 133505:ChatInteractionReport:

1 个答案:

答案 0 :(得分:0)

线程应彼此独立于内存,不能在线程内部使用“ report”变量

foreach(report){
     ReportGeneric.ExportReportSchedulerModel tempReport = report; // independent memory address
     Thread exporttoexcel = new Thread(() => {
          .....
          tempReport ....
          .....
     });
     exporttoexcel.Start();
}