'Asynchronously gets a range of Documents in the index, in id order.
Identical to get_range() except that it returns a future. Call
get_result() on the return value to block on the call and get its result.'

@datastore_rpc._positional(5)
def get_range_async(self, start_id=None, include_start_object=True, limit=100, ids_only=False, deadline=None, **kwargs):

    app_id = kwargs.pop('app_id', None)
    if kwargs:
        raise TypeError(('Invalid    arguments:    %s' % ',    '.join(kwargs)))
    request = search_service_pb.ListDocumentsRequest()
    if app_id:
        request.set_app_id(app_id)
    params = request.mutable_params()
    _CopyMetadataToProtocolBuffer(self, params.mutable_index_spec())
    if start_id:
        params.set_start_doc_id(start_id)
    params.set_include_start_doc(include_start_object)
    params.set_limit(_CheckInteger(limit, 'limit', zero_ok=False, upper_bound=MAXIMUM_DOCUMENTS_RETURNED_PER_SEARCH))
    params.set_keys_only(ids_only)
    response = search_service_pb.ListDocumentsResponse()
    def hook():
        _CheckStatus(response.status())
        return self._NewGetResponse(response)
    return _RpcOperationFuture('ListDocuments', request, response, deadline, hook)
