Task.ContinueWith在上一个任务完成之前执行

时间:2016-09-10 16:54:12

标签: c# task

我有一个在X秒后执行Action的方法,代码:

public void PerformCancelableAction(string name, Action action, int delay)
{
      CancellationTokenSource cts = new CancellationTokenSource();
      _cancellationTokens.Add(new Tuple<string, CancellationTokenSource>(name, cts));
      Task.Factory.StartNew(async delegate
      {
            await Task.Delay(delay);
            if (!cts.IsCancellationRequested)
                action();
      }, cts.Token).ContinueWith((prevTask) =>
      {
            //prevTask.Wait(); even with this
            _cancellationTokens.RemoveAll(f => f.Item1 == name);
      });
}

我添加了List<Tuple<string, CancellationTokenSource>>动作的名称及其CTS,为什么?因此,当用户执行CancelAction(name)时,我会在列表中查找名称,然后使用令牌取消。

现在,主要想法是工作。但是, ContinueWith 中的代码会在上一个操作完成之前执行,从逻辑上讲,它必须等待上一个操作否?

它必须等待Task.Delay以便用户有机会取消它,但是现在,由于CTS立即从列表中删除,因此无法取消操作..

知道为什么吗?谢谢!

0 个答案:

没有答案