我有一个获取数据的任务。我有另一个属性,如果更改取消任务并再次启动任务,但使用下面显示的不同参数。
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
属性触发的第二个实例完成?
答案 0 :(得分:3)
您必须创建一个新的CancellationTokenSource
。
一旦发出CancellationTokenSource
信号,其所有令牌也会发出信号,他们将保持这种状态。
因此,如果您想要开始新任务,则需要一个全新的令牌源。