асинхронный запрос в космосе дБ - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь сделать запрос в космосе БД.Я хочу асинхронный запрос.Запрос вернул мне только один элемент.В Интернете я видел, как это сделать, когда запрос возвращает более одного элемента.Это мой метод:

    public async Task<TenantDetails> ReadBrokerSettings(string tenantId)
    {
        FeedOptions queryOptions = new FeedOptions { MaxItemCount = -1 };

        var tenantDTO = this._client.CreateDocumentQuery<TenantDTO>(
             UriFactory.CreateDocumentCollectionUri(_idDatabase, _idCollection), queryOptions)
             .Where(f => f.tenantId == tenantId)
             .AsEnumerable()
             .SingleOrDefault();

        return tenantDTO != null ? _iTenantAssembler.DtoToEntity(tenantDTO) : null;
    }

Компилятор скажет мне, что он не асинхронный.Спасибо

1 Ответ

0 голосов
/ 04 января 2019

Это потому что это не асинхронно.Вам необходимо преобразовать его в запрос документа и использовать комбинацию HasMoreResults + ExecuteNextAsync и использовать ключевое слово await в ExecuteNextAsync.

Вот рабочий пример:

public async Task<TenantDetails> ReadBrokerSettings(string tenantId)
{
    FeedOptions queryOptions = new FeedOptions { MaxItemCount = 1 };

    var query = this._client.CreateDocumentQuery<TenantDTO>(
         UriFactory.CreateDocumentCollectionUri(_idDatabase, _idCollection), queryOptions)
         .Where(f => f.tenantId == tenantId).AsDocumentQuery();

    while(query.HasMoreResults)
    {
        var results = await query.ExecuteNextAsync();
        if(results.Any())
        {
            return _iTenantAssembler.DtoToEntity(results.Single());
        }
    }

    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...