我有以下代码来生成两个线程,如下面的Method2
Thread[] arrThreads = new Thread[2];
Thread t1 = new Thread(() =>
{
value1 = this.Method1(<some params>);
});
t1.Start();
arrThreads[0] = t1;
Thread t2 = new Thread(() =>
{
value2 = this.SomeOtherMethod(<some params>);
});
t2.Start();
arrThreads[1] = t2;
// Code which waits for both threads to get over OR for a threshold, whichever comes first!
这对我的开发工作正常。但是在发布到IIS生产机器时,遇到以下错误。
at System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex)
at System.Data.RBTree`1.get_Item(Int32 index)
at System.Data.DataRowCollection.get_Item(Int32 index)
at Namespace.Class.Method1(params) in D:\XXXX\Class.cs:line 11309
at Namespace.Class.<>c__DisplayClasse.<Method2>b__a() in D:\XXXX\Class.cs:line 11687
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()
有人可以帮我解决这个错误吗?提前谢谢。
答案 0 :(得分:0)
您需要检查Namespace.Class.Method1
中的D:\XXXX\Class.cs:line
内所发生的事情,在{或1-}左右(有时线号跟踪有点棘手)11309.我希望它会做某事像:
var row = someDataTable.Rows[0];
此时,没有行 - 也许某个查询由于某种原因没有返回任何数据(请检查查询)。理论上,这也可能与非同步线程问题(因为你启动两个线程)或竞争条件有关 - 但同样:我们没有足够的上下文。在此之前,没有理由预先假定这与多线程有关,但如果你有多个线程改变相同的状态数据,那么就应该记住这一点。