private static void DoPrivate(object state) { object[] objArray = state as object[]; IList list = objArray[0] as IList; AsyncHelper.AsyncContext asyncContext = objArray[1] as AsyncHelper.AsyncContext; AutoResetEvent autoResetEvent = objArray[2] as AutoResetEvent; AsyncHelper.DataWithStateList dataWithStates = asyncContext.DataWithStates; Thread.CurrentThread.Name = "Thread " + (object)AsyncHelper._threadNo; Interlocked.Increment(ref AsyncHelper._threadNo); string str = Thread.CurrentThread.Name + "[" + (object)Thread.CurrentThread.ManagedThreadId + "]"; Trace.WriteLine("线程ID:" + str); if (list != null) { for (int index = 0; index < list.Count; ++index) { if (asyncContext.NeedBreak) { Trace.WriteLine("线程" + str + "未执行完跳出"); break; } object obj = list[index]; if (dataWithStates.IsWaitForData(obj, true)) { if (asyncContext.NeedBreak) { Trace.WriteLine("线程" + str + "未执行完跳出"); break; } asyncContext.Exec(obj); Trace.WriteLine(string.Format("线程{0}处理{1}", (object)str, obj)); } } } if (asyncContext.NeedWaitAll) { while (dataWithStates.WaitForDataCount > asyncContext.ThreadCount && !asyncContext.NeedBreak) { object waitForObject = dataWithStates.GetWaitForObject(); if (waitForObject != null && dataWithStates.IsWaitForData(waitForObject, false)) { if (asyncContext.NeedBreak) { Trace.WriteLine("线程" + str + "未执行完跳出"); break; } asyncContext.Exec(waitForObject); Trace.WriteLine(string.Format("线程{0}执行另一个进程的数据{1}", (object)str, waitForObject)); } } } autoResetEvent.Set(); }
private static void DoPrivate(object state) { object[] array = state as object[]; IList list = array[0] as IList; AsyncHelper.AsyncContext asyncContext = array[1] as AsyncHelper.AsyncContext; AutoResetEvent autoResetEvent = array[2] as AutoResetEvent; AsyncHelper.DataWithStateList dataWithStates = asyncContext.DataWithStates; Thread.CurrentThread.Name = "Thread " + AsyncHelper._threadNo; Interlocked.Increment(ref AsyncHelper._threadNo); string text = string.Concat(new object[] { Thread.CurrentThread.Name, "[", Thread.CurrentThread.ManagedThreadId, "]" }); Trace.WriteLine("线程ID:" + text); if (list != null) { for (int i = 0; i < list.Count; i++) { if (asyncContext.NeedBreak) { Trace.WriteLine("线程" + text + "未执行完跳出"); break; } object obj = list[i]; if (dataWithStates.IsWaitForData(obj, true)) { if (asyncContext.NeedBreak) { Trace.WriteLine("线程" + text + "未执行完跳出"); break; } asyncContext.Exec(obj); Trace.WriteLine(string.Format("线程{0}处理{1}", text, obj)); } } } if (asyncContext.NeedWaitAll) { while (dataWithStates.WaitForDataCount > asyncContext.ThreadCount) { if (asyncContext.NeedBreak) { break; } object obj = dataWithStates.GetWaitForObject(); if (obj != null && dataWithStates.IsWaitForData(obj, false)) { if (asyncContext.NeedBreak) { Trace.WriteLine("线程" + text + "未执行完跳出"); break; } asyncContext.Exec(obj); Trace.WriteLine(string.Format("线程{0}执行另一个进程的数据{1}", text, obj)); } } } autoResetEvent.Set(); }