class Async::Container::Supervisor::Connection::Call

def self.dispatch(connection, target, id, message)

def self.dispatch(connection, target, id, message)
	Async do
		call = self.new(connection, id, message)
		connection.calls[id] = call
		
		target.dispatch(call)
		
		while response = call.pop
			connection.write(id: id, **response)
		end
	ensure
		# If the queue is closed, we don't need to send a finished message.
		unless call.closed?
			connection.write(id: id, finished: true)
		end
		
		connection.calls.delete(id)
	end
end