CancelAfter не выполняется после тайм-аута - PullRequest
0 голосов
/ 15 января 2019

У меня есть следующее, которое вызывается в контроллере Web Api. Каждая задача запускает сторонний API-запрос. В настоящее время первая выполненная задача возвращается правильно, но последующие задачи, которые занимают более 500 мс, выполняются до завершения.

        List<Task> tasks = new List<Task>();
        CancellationTokenSource cts = new CancellationTokenSource();            
        cts.CancelAfter(500);

        foreach (Models.Channel.IChannel channel in channels)
        {
            try
            {
                tasks.Add(Task.Run(() =>
                {
                    if (cts.Token.IsCancellationRequested)
                        cts.Token.ThrowIfCancellationRequested();

                    channel.Data = channel.RequestOffers(new Models.Request.AvailabilityRequest()).Result;
                    availabilityResponse.Agents.Add(channel.Name);
                }, cts.Token));

                Task.WaitAny(tasks.ToArray());    
            }
            catch (Exception ex) 
            {
                log.Error(ex);
            }
        }

Почему не отменяются задачи продолжительностью более 500 мс?

...