首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步恢复光纤

异步恢复光纤
EN

Stack Overflow用户
提问于 2013-08-22 13:56:21
回答 1查看 302关注 0票数 0

我无法理解,为什么这段代码不能工作。我想要做的是模仿使用光纤的同步代码行为。

代码语言:javascript
复制
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

当我运行此代码时,输出如下:

代码语言:javascript
复制
$ ruby fiber_poc.rb
  Fiber Started
  Resuming Fiber

纤维永远不会恢复。你能解释一下我怎么做吗?

谢谢各位

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 14:12:28

代码语言:javascript
复制
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

你会得到

代码语言:javascript
复制
#=> Fiber Started
#=> Resuming Fiber
#=> page fetched http://www.whatever.com
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18382541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档