Task.RunSynchronously() doesn’t care about CancellationToken

本文关键字:care about CancellationToken doesn RunSynchronously Task | 更新日期: 2023-09-27 18:06:06

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

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

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

cts.Cancel()被调用后(在一个单独的线程上)任务不会停止

我在f#中找到了一个静态函数,它可以做到这一点:

Async.RunSynchronously(computation, timeout, cancellationToken)

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

Task.RunSynchronously() doesn’t care about CancellationToken

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

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

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

简而言之——如果你想停止执行一个正在运行不支持取消令牌的第三方函数的线程,你需要找到另一种方法。