是否可以检索创建当前光纤的光纤?如果我能在创建新的 Fiber 时获得这些信息就足够了。
Monkey-patchingFiber#new
不起作用,因为调用Fiber#current
会导致“未初始化的光纤”错误。
我终于找到了让它工作的方法。如果我们重新定义initialize
它将失败,因为内部不会初始化光纤。然而,可以给它起别名,创建一个新的,然后运行旧的:
class Fiber
alias_method :old_init, :initialize
def initialize
old_init
@parent = Fiber.current
end
def parent
@parent
end
end
因为直到我们在纤程上Fiber.current
执行才会改变,我们可以安全地在初始化器中复制一个引用。resume
现在我们可以问系统“你爷爷是谁?” Fiber.current.parent.parent
.