示例#1
0
        public void StartAllTasks(int countTasks, int countItems)
        {
            var token = _tokenSource.Token;
            var m = new MyTask();

            for (var i = 1; i <= countTasks; i++)
            {
                var t = Task.Factory.StartNew(iteration => m.DoSomeWork((int)iteration, countItems, token), i, token);
                _tasks.Add(t);

            }
            char ch = Console.ReadKey().KeyChar;
            if (ch == 'c' || ch == 'C')
            {
                _tokenSource.Cancel();
            }

            try
            {
                Task.WaitAll(_tasks.ToArray());

            }
            catch (AggregateException e)
            {
                Console.WriteLine("\nИсключения в потоках");

                foreach (var v in e.InnerExceptions)
                {
                    if (!(v is TaskCanceledException))
                        Console.WriteLine("   Exception: {0}", v.GetType().Name);
                }

                Console.WriteLine();
            }
            finally
            {
                _tokenSource.Dispose();
            }

            var output= new ConsoleOutput();
            output.OutputCountItem(_tasks);
        }