【发布时间】:2016-07-05 09:01:56
【问题描述】:
我正在尝试了解以下代码 sn-p 的行为。我特别关注Fiber#transfer 方法。
require 'fiber'
fiber2 = nil
fiber1 = Fiber.new do
puts "In Fiber 1" # 3
fiber2.transfer # 4
end
fiber2 = Fiber.new do
puts "In Fiber 2" # 1
fiber1.transfer # 2
puts "In Fiber 2 again" # 5
Fiber.yield # 6
puts "Fiber 2 resumed" # 10
end
fiber3 = Fiber.new do
puts "In Fiber 3" # 8
end
fiber2.resume # 0
fiber3.resume # 7
fiber2.resume # 9
我已经用右侧的预期执行顺序对代码行进行了编号。一旦fiber3.resume 返回并调用fiber2.resume,我希望在标记为# 10 的行处fiber2 内继续执行。相反,我收到以下错误:
fiber2.rb:24:in `resume': cannot resume transferred Fiber (FiberError)
from fiber2.rb:24:in `<main>'
这是列表最后一行报告的错误:fiber2.resume。
【问题讨论】: