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); }