代码之家  ›  专栏  ›  技术社区  ›  neildt

超时后不执行cancelafter

  •  0
  • neildt  · 技术社区  · 6 年前

    我有以下在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 回复  |  直到 6 年前