Ruby 基于异步方法恢复光纤

Ruby 基于异步方法恢复光纤,ruby,ruby-1.9,fibers,Ruby,Ruby 1.9,Fibers,我不明白,为什么这个代码不起作用。 我试图做的是使用光纤模拟同步代码行为 require 'fiber' require 'eventmachine' def async_request(url) f = Fiber.current Thread.new do sleep 0.3 puts 'Resuming Fiber' f.resume('page fetched #{url}') end end def async_get(url) async

我不明白,为什么这个代码不起作用。 我试图做的是使用光纤模拟同步代码行为

require 'fiber'
require 'eventmachine'

def async_request(url)
  f = Fiber.current
  Thread.new do
    sleep 0.3
    puts 'Resuming Fiber'
    f.resume('page fetched #{url}')
  end
end


def async_get(url)
  async_request url
  val = Fiber.yield
  return val
end

EM.run do 

  Fiber.new do
    puts 'Fiber Started'
    page = async_get('http://www.whatever.com')
    puts page
  end.resume

end
运行此代码时,输出为:

$ ruby fiber_poc.rb
  Fiber Started
  Resuming Fiber
光纤永远不会恢复。 你能解释一下我怎么做吗

谢谢各位

require 'fiber'
require 'eventmachine'

def async_request(url)
  f = Fiber.current
  EM.add_timer(0.3) do
    puts 'Resuming Fiber'
    f.resume("page fetched #{url}")
  end
end

def async_get(url)
  async_request url
  Fiber.yield
end

EM.run do 
  Fiber.new do
    puts 'Fiber Started'
    page = async_get('http://www.whatever.com')
    puts page
    EM.stop
  end.resume
end
你会得到

#=> Fiber Started
#=> Resuming Fiber
#=> page fetched http://www.whatever.com

谢谢@fl00r。接得好。为什么线不能使用?无论如何谢谢你!