【发布时间】:2018-12-17 21:05:55
【问题描述】:
假设我们有一个具有长时间运行循环的 Fiber,并且当我们收到消息时具有给定的超时通道,我们想要停止 Fiber 并重新启动它(或执行其他操作)。这是伪代码:
# 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
【问题讨论】:
-
传统方式是设置某种“停止”布尔标志:)
-
刚刚更新了问题,我没有办法将变量传递给函数以检查每个循环
-
是的,通常我会说“添加一些东西来运行以使其可中断”(或者让它在内部关闭一些东西......)gl!
-
Something.run在这种情况下不是我的代码 -
我认为没有任何帮助 - 没有办法停止一个不想被停止的本机函数,除非我们在谈论水晶函数t yield,或从用 C 编写的库链接的函数。