ними WaitAll().
                  
                  
                  var task1 = Task.Run(async () => await DoSmth1(canellationTokenSource), cancellationToken);
                  
                  
                  var task2 = Task.Run(async () => await DoSmth2(canellationTokenSource), cancellationToken);
                  
                  
                  Привет всем!
                  
                  
                  Подскажите, пожалуйста.
                  
                  
                  Я запускаю три таска, чтобы потом сделать с ними WaitAll().
                  
                  
                  
                  
                  
                  
                  
                  
                  var task1 = Task.Run(async () => await DoSmth1(canellationTokenSource), cancellationToken);
                  
                  
                  var task3 = Task.Run(async () => await DoSmth3(canellationTokenSource), cancellationToken);
                  
                  
                  var tasks = new Task[] { task1, task2, task3 };
                  
                  
                  
                  
                  
                  try
                  
                  
                  {
                  
                  
                       Task.WaitAll(tasks, 30000, cancellationToken);
                  
                  
                  }
                  
                  
                  catch (OperationCanceledException e)
                  
                  
                  {
                  
                  
                      Console.WriteLine(e);
                  
                  
                      throw;
                  
                  
                  }
                  
                  
                  finally
                  
                  
                  {
                  
                  
                      cancellationTokenSource.Dispose();
                  
                  
                  }
                  
                  
                  
                  
                  
                  Проблема в том, что компилятор делает ворнинг, что "captured variable is disposed in outer scope" на cancellationTokenSource, в местах, где делаются Task.Run.
                  
                  
                  
                  
                  
                  Насколько я знаю, cancellationTokenSource НАДО диспоузить, однако меня смущает вот этот ворнинг. Подскажите, пожалуйста, что я делаю не так или как лучше сделать? Спасибо.
                  
                  
                
Все
компилятор не знает завершатся ли таски до того как ты попадешь в finally, думаю он не настолько умный чтобы понять WaitAll
Начнем с того, что WaitAll, будет блокировать вызывающий поток, то есть не рекомендуеться использовать его. async () => , будет продолжать выполнение на потоке из пула потоков
Ну первое забери отуда async😁
Зачем здесь так?
В середине Task.Run, должно быть try ... catch
Обсуждают сегодня