Example #1
0
        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();
        }