'Asynchronously leases a number of tasks from the Queue.
This function is identical to lease_tasks() except that it returns an
asynchronous object. You can call get_result() on the return value to block
on the call.
Args:
lease_seconds: Number of seconds to lease the tasks.
max_tasks: Max number of tasks to lease from the pull Queue.
rpc: An optional UserRPC object.
Returns:
A UserRPC object, call get_result to complete the RPC and obtain the list
of tasks leased from the Queue.
Raises:
InvalidLeaseTimeError: if lease_seconds is not a valid float or integer
number or is outside the valid range.
InvalidMaxTasksError: if max_tasks is not a valid integer or is outside
the valid range.'

def lease_tasks_async(self, lease_seconds, max_tasks, rpc=None):

    lease_seconds = self._ValidateLeaseSeconds(lease_seconds)
    self._ValidateMaxTasks(max_tasks)
    request = taskqueue_service_pb.TaskQueueQueryAndOwnTasksRequest()
    response = taskqueue_service_pb.TaskQueueQueryAndOwnTasksResponse()
    request.set_queue_name(self.__name)
    request.set_lease_seconds(lease_seconds)
    request.set_max_tasks(max_tasks)
    return self._QueryAndOwnTasks(request, response, self.__name, rpc)
