【发布时间】:2021-04-14 16:26:15
【问题描述】:
我正在努力解决以下问题:
我有一个系统,它有它的主要流程,并且有两个可以启动和停止的后台线程,但它们通常运行时间很长,因为它们只在配置更改期间停止。
我发现 F# 中的取消标记在代码中的异步点被检查。 工作线程不执行任何异步操作;他们正在做后台工作,但没有什么是异步的。
简化版如下所示:
let workerThread (someParameters) =
async {
while true do
setup some event driven system that has a callback when work is finished
on callback, signal
waitHandle.WaitOne()
}
它是这样开始的:
Async.StartAsTask(workerThread parameter, cancellationToken = cancellationSource.Token)
由于系统中绝对没有异步,因此永远不会检查取消令牌,此外,我需要能够在两个工作线程不断设置的事件驱动系统中手动检查它。
如何做到这一点?在 C# 中,令牌是直接传递的,我可以随时检查它。
【问题讨论】:
-
你不能将令牌作为参数传递给
workerThread吗? -
是的,我可以,但我认为,也许是错误的,有一种机制可以访问它,因为它必须被带到线程中
标签: multithreading f# cancellationtokensource cancellation-token