【发布时间】:2015-09-03 13:54:31
【问题描述】:
我正在使用以下代码使用线程来执行任务,这里我尝试执行“dtTable”数据表中的所有记录。有限的线程数为 2(即有时只允许两个线程/只允许执行)。问题是它没有执行 Datatable 中可用的所有记录,它以不规则的方式执行数据。可能是什么问题..?提前致谢。
public class Generator : IDisposable
{
public static int maxThreadCount = 2;
public static int runningThreadCount = 0;
public RunTask()
{
for (int ro = 0; ro <= dtTable.Rows.Count - 1; ro++)
{
if (maxThreadCount > runningThreadCount)
{
Thread atpthread = new Thread(delegate()
{
DoOperationMethod(dtTable.Rows[ro], Task, startDate, EndDate, dtTemplate);
});
atpthread.Start();
runningThreadCount = runningThreadCount + 1;
Mainthreads.Add(atpthread);
}
else
{
ro--;
}
}
}
public void DoOperationMethod(DataRow drAttachpoint, System.StrTaskItem Task, DateTime startDate, DateTime EndDate, DataTable dtTemplate)
{
//doing my Operation
runningThreadCount = runningThreadCount-1; //Once Task done count will get reduce
}
}
我正在使用 .net 3.5(仅供参考)。
【问题讨论】:
-
你能把剩下的代码贴出来吗?它可能与
runningThreadCount有关,您似乎在多个线程中同时更改,但我们无法确定该代码。 -
看来
DoOperationMethod也可以直接与DataTable一起使用,但由于DataTable不是线程安全的,因此您可能会遇到问题。我们需要看代码来确认。 -
感谢您的神秘,我已经添加了其余代码,
标签: c# multithreading for-loop parallel-processing