Async::IO SourceAsyncIOGenericclass

class << self

Definitions

def wrap_blocking_method(new_name, method_name, invert: true, &block)

Invokes $2 on the underlying io. If the operation would block, the current task is paused until the operation can succeed, at which point it's resumed and the operation is completed.

Implementation

def wrap_blocking_method(new_name, method_name, invert: true, &block)
	if block_given?
		define_method(new_name, &block)
	else
		define_method(new_name) do |*args|
			async_send(method_name, *args)
		end
	end
	
	if invert
		# We wrap the original _nonblock method, ignoring options.
		define_method(method_name) do |*args, exception: false|
			async_send(method_name, *args)
		end
	end
end

def wrap(*args)

Instantiate a wrapped instance of the class, and optionally yield it to a given block, closing it afterwards.

Implementation

def wrap(*args)
	wrapper = self.new(@wrapped_klass.new(*args))
	
	return wrapper unless block_given?
	
	begin
		yield wrapper
	ensure
		wrapper.close
	end
end