static void Main34()
        {
            const int TaskCount = 10;

            // One event is used for each Fibonacci object
            ManualResetEvent[] doneEvents = new ManualResetEvent[TaskCount];
            OneCalc[]          fibArray   = new OneCalc[TaskCount];
            Random             r          = new Random();

            // Configure and launch threads using ThreadPool:
            Console.WriteLine("launching {0} tasks...", TaskCount);
            for (int i = 0; i < TaskCount; i++)
            {
                doneEvents[i] = new ManualResetEvent(false);
                OneCalc f = new OneCalc(r.Next(20, 40), doneEvents[i]);
                fibArray[i] = f;
                ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i);
            }

            // Wait for all threads in pool to calculation...
            WaitHandle.WaitAll(doneEvents);
            Console.WriteLine("All calculations are complete.");
            Console.ReadKey();

            // Display the results...
            for (int i = 0; i < TaskCount; i++)
            {
                OneCalc f = fibArray[i];
                Console.WriteLine("OneCalc({0}) = {1}", f.N, f.FibOfN);
            }
        }
        static void Main34()
        {
            const int TaskCount = 10;

            // One event is used for each Fibonacci object
            ManualResetEvent[] doneEvents = new ManualResetEvent[TaskCount];
            OneCalc[] fibArray = new OneCalc[TaskCount];
            Random r = new Random();

            // Configure and launch threads using ThreadPool:
            Console.WriteLine("launching {0} tasks...", TaskCount);
            for (int i = 0; i < TaskCount; i++)
            {
                doneEvents[i] = new ManualResetEvent(false);
                OneCalc f = new OneCalc(r.Next(20, 40), doneEvents[i]);
                fibArray[i] = f;
                ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i);
            }

            // Wait for all threads in pool to calculation...
            WaitHandle.WaitAll(doneEvents);
            Console.WriteLine("All calculations are complete.");
            Console.ReadKey();

            // Display the results...
            for (int i = 0; i < TaskCount; i++)
            {
                OneCalc f = fibArray[i];
                Console.WriteLine("OneCalc({0}) = {1}", f.N, f.FibOfN);
            }
        }