Created
February 4, 2013 05:53
-
-
Save stevecj/4705227 to your computer and use it in GitHub Desktop.
A demonstration of transfer of control to/from a Fiber in Ruby 1.9.x.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fib = Fiber.new do |val| | |
puts ' -- 2 --' | |
puts 'fiber started & got: ' + val | |
puts 'now yield with "1st yield"' | |
val = Fiber.yield('fiber yield 1') | |
puts ' -- 4 --' | |
puts '1st yield got: ' + val | |
puts 'now yield with "2nd yield"' | |
val = Fiber.yield('fiber yield 2') | |
puts ' -- 6 --' | |
puts '2nd yield got: ' + val | |
puts 'now return "fiber return"' | |
'fiber return' | |
end | |
puts ' -- 1 --' | |
puts 'now resume with "resume 1"' | |
val = fib.resume('resume 1') | |
puts ' -- 3 --' | |
puts '1st resume got: ' + val | |
puts 'now resume with "resume 2"' | |
val = fib.resume('resume 2') | |
puts ' -- 5 --' | |
puts '2nd resume got: ' + val | |
puts 'now resume with "resume 3"' | |
val = fib.resume('resume 3') | |
puts ' -- 7 --' | |
puts '3rd resume got: ' + val | |
puts 'now return after fiber has finished' | |
fib.resume | |
# Running this code results in ... | |
# | |
# -- 1 -- | |
# now resume with "resume 1" | |
# -- 2 -- | |
# fiber started & got: resume 1 | |
# now yield with "1st yield" | |
# -- 3 -- | |
# 1st resume got: fiber yield 1 | |
# now resume with "resume 2" | |
# -- 4 -- | |
# 1st yield got: resume 2 | |
# now yield with "2nd yield" | |
# -- 5 -- | |
# 2nd resume got: fiber yield 2 | |
# now resume with "resume 3" | |
# -- 6 -- | |
# 2nd yield got: resume 3 | |
# now return "fiber return" | |
# -- 7 -- | |
# 3rd resume got: fiber return | |
# now return after fiber has finished | |
# fiber_demo.rb:42:in `resume': dead fiber called (FiberError) | |
# from fiber_demo.rb:42:in `<main>' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment