Ruby中的任务/未来

Pav*_*aev 16 ruby asynchronous

什么是模式的惯用Ruby模拟,表示可能延期的异步计算,可以订阅它的完成?即.NET System.Threading.Task或Python 3.x中的某些东西concurrent.futures.future.

请注意,这并不一定意味着多线程 - "未来"对象的实际实现可能会使用其他方式来调度工作和获取结果,并且超出了问题的范围.该问题严格地涉及呈现给对象的用户的API.

Ser*_*sev 9

我不确定vanilla Ruby,但EventMachine有延迟.

另外,请查看这篇文章.

EM.run {
  detector = LanguageDetector.new("Sgwn i os yw google yn deall Cymraeg?")
  detector.callback { |lang| puts "The language was #{lang}" }
  detector.errback { |error| puts "Error: #{error}" }
}
Run Code Online (Sandbox Code Playgroud)


meg*_*gas 1

纤维?

纤程是在 Ruby 中实现轻量级协作并发的原语。基本上,它们是创建可以暂停和恢复的代码块的一种方法,就像线程一样。主要区别在于它们永远不会被抢占,并且调度必须由程序员而不是虚拟机完成。关联