Sha256: 15805dc4cf0a334882bf9e2d8e72c721d3ba6218dd4e57ce3bb85af05e7707a4

Contents?: true

Size: 435 Bytes

Versions: 1

Compression:

Stored size: 435 Bytes

Contents

require 'fiber'
require 'cool.io'

class Coolio::SyncDefer < Coolio::AsyncWatcher
  def self.defer loop=Coolio::Loop.default, &block
    new(loop, &block).result
  end

  attr_reader :result

  def initialize loop=Coolio::Loop.default
    super()
    @fiber = Fiber.current
    attach(loop)
    Thread.new{
      @result = yield
      signal
    }
    Fiber.yield
  end

  def on_signal
    detach
    @fiber.resume(result)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sync-defer-0.9.0 lib/cool.io/sync-defer.rb