CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; Console.WriteLine("Основной поток запущен"); for (int i = 0; i < 300; i++) { task[i] = new Task( () => { MyTask(); },token); task[i].Start(); } Task.WaitAll(task); Console.WriteLine("Основной поток завершен"); Console.ReadLine(); using (var cts = new CancellationTokenSource()) { var ct = cts.Token; tasks = Enumerable.Range(0, 300) .Select(i => Task.Run(() => MyTask(ct), ct) cts.CancelAfter(TimeSpan.FromSeconds(30)); await Task.WhenAll(tasks); }