Task-Cancellation после Task.WhenAny - PullRequest
0 голосов
/ 17 марта 2020

У меня есть метод, который охватывает несколько заданий для параллельной работы - их фактическое время выполнения зависит. Когда первая задача заканчивается, другая рабочая задача должна быть отменена в методе, подобном приведенному ниже коду:

static async Task DoWorkAsync(CancellationToken cancelToken){
    while(true) {
        using(CancellationTokenSource source = new CancellationTokenSource()) {
            Task workTask1 = Task.Delay(500, source.Token); // Some work
            Task workTask2 = Task.Delay(1500, source.Token); // Some other work

            await Task.WhenAny(workTask1, workTask2, Task.Delay(-1, cancelToken));

            if (cancelToken.IsCancellationRequested) break;

            source.Cancel();

            // Do something with result ...
        }
    }
}
  • Есть ли лучший способ справиться / отменить незаконченную другую работу -tasks?
  • Меня также интересует стоимость создания новых CancellationTokenSource объектов в каждой l oop итерации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...