APIdock / Ruby
/
method

transfer

ruby latest stable - Class: Fiber
transfer(*args)
public

Transfer control to another fiber, resuming it from where it last stopped or starting it if it was not resumed before. The calling fiber will be suspended much like in a call to Fiber.yield. You need to require ‘fiber’ before using this method.

The fiber which receives the transfer call is treats it much like a resume call. Arguments passed to transfer are treated like those passed to resume.

You cannot resume a fiber that transferred control to another one. This will cause a double resume error. You need to transfer control back to this fiber before it can yield and resume.

Example:

fiber1 = Fiber .new  do
 puts "In Fiber 1"
 Fiber .yield 
end
fiber2 = Fiber .new  do
 puts "In Fiber 2"
 fiber1.transfer 
 puts "Never see this message"
end
fiber3 = Fiber .new  do
 puts "In Fiber 3"
end
fiber2.resume 
fiber3.resume 

produces

In fiber 2
In fiber 1
In fiber 3
static VALUE
rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fibval)
{
 rb_fiber_t *fib;
 GetFiberPtr(fibval, fib);
 fib->transferred = 1;
 return fiber_switch(fib, argc, argv, 0);
}

AltStyle によって変換されたページ (->オリジナル) /