繁体   English   中英

Cosmos db 中的异步查询

[英]async query in cosmos db

我正在尝试在 cosmos db 中进行查询。 我想要一个异步查询。 查询只返回一个元素。 在网上,我已经看到了当查询返回多个元素时如何做到这一点。 这是我的方法:

    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;
    }

编译器说我不是异步的。 谢谢

那是因为它不是异步的。 您需要将其转换为文档查询并使用HasMoreResults + ExecuteNextAsync组合并在ExecuteNextAsync上使用await关键字。

这是一个工作示例:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM