Task.RunSynchronously()不关心CancellationToken

时间:2014-05-31 02:23:54

标签: c# multithreading task cancellationtokensource cancellation-token

我想在当前线程上执行第三方功能(以避免开销),但希望能够使用 CancellationToken 随时中断该功能。

这就是我创建和运行任务的方式:

var task = new Task(proc, cts.Token); // cts is my CancellationTokenSource
task.RunSynchronously();

调用cts.Cancel()后(在另一个帖子上)任务不会停止

我在F#中找到了一个静态函数,可以解决这个问题:

Async.RunSynchronously(computation, timeout, cancellationToken)

我确信应该有一个简单的C#解决方案,你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我认为您误解了取消令牌的工作原理。它们不会杀死工作线程 - 工作者函数需要定期检查取消令牌并查看它是否应该停止。来自http://msdn.microsoft.com/en-us/library/dd997289(v=vs.110).aspx

  

接收通知的对象可以以适当的方式响应。

在此处查看更多信息,包括示例:http://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx

简短的故事 - 如果你想停止执行一个运行第三方功能并且不会取消取消令牌的线程,你需要找到另一种方式。