繁体   English   中英

使用取消令牌取消任务

[英]cancelling tasks with cancellation tokens

我有一个获取数据的任务。 我有另一个属性,如果更改取消任务并再次启动任务但使用下面显示的不同参数。

private CancellationTokenSource CTS = new CancellationTokenSource();

private void LoadMyStuff(string parameter)
{          
     Task<List<Stuff>> loadStuff = new Task<List<Stuff>>(() => ServiceMethod(parameter));
     loadStuff.Start();
     loadStuff.ContinueWith((Sender) =>
     {
           foreach (var entry in Sender.Result)
           {
               if (!CTS.IsCancellationRequested)
               {
                   //Proccess my data      
               }
               else
               {
                   CTS.Cancel();
                   return;
               }
            }
     }, CTS.Token, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext());
     loadStuff.ContinueWith((Sender) =>
     {
          //Clean Up
     }, CTS.Token, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.FromCurrentSynchronizationContext());
 }

属性:

private Thing _myThing
public Thing MyThing
{
   get { return _myThing; }
   set 
     {
        _myThing= value;
        CTS.Cancel();
        LoadMyStuff(parameter); 
     }
}

所以我的问题是我总是在它完成之前取消该任务。 如何在第一个任务实例取消但从MyThing属性触发的第二个实例完成时出现这种情况?

您必须创建一个新的CancellationTokenSource

一旦发出CancellationTokenSource信号,它的所有令牌也将发出信号,并且它们将保持这种状态。 因此,如果要开始新任务,则需要一个全新的令牌源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM