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