如何使用取消令牌中止线程



我有一个后台长时间运行的方法,它使用取消令牌。在取消时,即使调用了CancellationTokensource.Token.Register上调用的方法,线程仍会继续处理。

有没有一种方法可以在调用寄存器后停止处理线程?

CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
void HandleBackgroundTasks(object args)
{
var task = Task.Factory.StartNew(() => BackgroundTask(), 
_cancellationTokensource.Token);
task.ContinueWith(t =>
{
if (t.IsFaulted)
{
//handle faulted
}
}
}
void BackgroundTask()
{
_cancellationTokenSource.Token.Register(() =>
{
service.CancelTask();//method to reset database values on cancel
}

//Some code to check whether to run HandleLongrunningTask method
service.HandleLongrunningTask(); //long running task
}

CancellationToken不会强制导致任何事情停止处理。

进行处理的代码需要使用CancellationToken,方法是将其传递到其他函数中,或调用ThrowIfCancellationRequested(或检查IsCancellationRequestd(,并让生成的OperationCanceledException展开堆栈。

最新更新