放出你线程的代码来,是否都执行的同一个函数并且没有参数,所以其实都是运行的同一个逻辑? 简单的检测方法: 先把另外两个线程注释掉,不让它执行,只执行其中一个线程,看结果 执行方法放到一个类中的,每个线程都会创建一个该类的对象,运行的逻辑一样,只是有些变量不一样 TaskRun theRun = new TaskRun(RunType.DiffSourceCheck, htPara); theRun.SourceNodeDBInfo = SourceNode[0]; theRun.TargetNodeDBInfo = theDataSource; listNode.Add(theDataSource.DataSourceNodeCode + "," + theDataSource.DataSourceName); theRun.CheckDataSource = CheckDataSource; theRun.ThreadID = Guid.NewGuid().ToString(); theRun.ListTaskItem = (from a in theCurTaskInfo.TaskItemList where a.IsSelect select a).ToList<TaskItemInfo>(); theRun.RunnerSuccess += new RunnerEvent(TaskRunnerSuccessEvent); theRun.RunnerFailure += new RunnerEvent(TaskRunnerFailureEvent); theRun.SysParameter = SysParameter; System.Threading.Thread theThread = new System.Threading.Thread(new System.Threading.ThreadStart(theRun.RunTask)); theThread.Name = theRun.ThreadID; ListAllThread.Add(theThread);上面的theDataSource是不一样的
不法 --> 无法随便举两个例子。比如说有人定一个private static DbConnection conn;变量,这一看就知道经不起多线程程序考验。再比如说代码foreach( var x in list) { 启动线程处理(x); } 这显然也会出现问题的,因为变量 i 是被多线程所共享访问的。
建议先不要多线程,把写入数据入队列
由单独线程从队列中取数操作入库
这样可以检测出业务逻辑有没有bug
简单的检测方法:
先把另外两个线程注释掉,不让它执行,只执行其中一个线程,看结果
执行方法放到一个类中的,每个线程都会创建一个该类的对象,运行的逻辑一样,只是有些变量不一样 TaskRun theRun = new TaskRun(RunType.DiffSourceCheck, htPara);
theRun.SourceNodeDBInfo = SourceNode[0];
theRun.TargetNodeDBInfo = theDataSource; listNode.Add(theDataSource.DataSourceNodeCode + "," + theDataSource.DataSourceName); theRun.CheckDataSource = CheckDataSource;
theRun.ThreadID = Guid.NewGuid().ToString();
theRun.ListTaskItem = (from a in theCurTaskInfo.TaskItemList where a.IsSelect select a).ToList<TaskItemInfo>();
theRun.RunnerSuccess += new RunnerEvent(TaskRunnerSuccessEvent);
theRun.RunnerFailure += new RunnerEvent(TaskRunnerFailureEvent);
theRun.SysParameter = SysParameter;
System.Threading.Thread theThread = new System.Threading.Thread(new System.Threading.ThreadStart(theRun.RunTask));
theThread.Name = theRun.ThreadID; ListAllThread.Add(theThread);上面的theDataSource是不一样的
{
启动线程处理(x);
}
这显然也会出现问题的,因为变量 i 是被多线程所共享访问的。