取消超时后不执行

时间:2019-01-15 17:47:34

标签: c# asp.net-web-api task cancellationtokensource

我在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毫秒的任务?

0 个答案:

没有答案