def execute(call_sig, req, metadata, opts = {}, &block)
      operation = nil
      result = Gruf::Timer.time do
        opts[:return_op] = true
        opts[:metadata] = metadata
        operation = send(call_sig, req, opts, &block)
        operation.execute
      end
      [result, operation]
    end
def execute(call_sig, req, metadata, opts = {}, &block)
      operation = nil
      result = Gruf::Timer.time do
        opts[:return_op] = true
        opts[:metadata] = metadata
        operation = send(call_sig, req, opts, &block)
        operation.execute
      end
      [result, operation]
    end
Execute the given request to the service

 @param [Symbol] call_sig The call signature being executed
 @param [Object] req (Optional) The protobuf request message to send
 @param [Hash] metadata (Optional) A hash of metadata key/values that are transported with the client request
 @param [Hash] opts (Optional) A hash of options to send to the gRPC request_response method
 @return [Array<Gruf::Timer::Result, GRPC::ActiveCall::Operation>]