比方说,我们有一个运行时间较长的光纤,并且具有给定的超时通道,当我们收到消息时,我们想停止光纤并重新启动它(或执行其他操作)。这是伪代码:
# we have a timeout channel
fiber = spawn do
# long running task
# note that I can't pass anything to the function to stop
Something.run
end
fiber.stop if timeout.receive
答案 0 :(得分:2)
目前无法阻止光纤从外部进入。
但是,在https://momentjs.com/docs/#/get-set/set/中提出了一个添加Fiber#cancel
的提议,该提议将提供一种通过在下次恢复执行时在其执行上下文中引发CancelledException
来软终止光纤的方法。 。
这仍然是一个活跃的讨论,描述您的用例肯定会有所帮助。
另一种选择是通过简单地从调度程序中删除光纤来硬杀死光纤。但是,这永远不会给它任何清理其资源的机会,而且可能不是您想要的。仍然没有官方的API。