Пример #1
0
        public static void WaitAllEx(
            IWorkItemResult[] passedWorkItemResults)
        {
            ArrayList workItemResults        = new ArrayList(passedWorkItemResults);
            ArrayList pendingWorkItemResults = new ArrayList();

            int prevCount = workItemResults.Count;

            while (workItemResults.Count > 0)
            {
                foreach (IWorkItemResult workItemResult in workItemResults)
                {
                    if (!workItemResult.IsCompleted)
                    {
                        pendingWorkItemResults.Add(workItemResult);
                    }
                }
                workItemResults = new ArrayList(pendingWorkItemResults);
                pendingWorkItemResults.Clear();

                if (workItemResults.Count == 0)
                {
                    return;
                }
                if (prevCount != workItemResults.Count)
                {
                    prevCount = workItemResults.Count;
                    ChoTrace.WriteLineIf(ChoTrace.ChoSwitch.TraceVerbose, String.Format("Waiting for {0} thread(s) to complete...", workItemResults.Count));
                    Thread.Sleep(1000);
                }
                else
                {
                    Thread.Sleep(5000);
                }
            }
        }