ними 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
Обсуждают сегодня