Azure cosmosdb 查询DocumentDB时会得到一个;“一项任务被取消”;错误

Azure cosmosdb 查询DocumentDB时会得到一个;“一项任务被取消”;错误,azure-cosmosdb,Azure Cosmosdb,当我查询DocumentDB时,有时会出现“任务被取消”异常。查询DocumentDB的代码如下 public IOrderedQueryable<T> QueryToDb(string DatabaseId, string CollectionId) { DocumentClient dcClient = new DocumentClient(new Uri(ConfigurationManager.AppSettings["documentURI"

当我查询DocumentDB时,有时会出现“任务被取消”异常。查询DocumentDB的代码如下

    public IOrderedQueryable<T> QueryToDb(string DatabaseId, string CollectionId)
    {
        DocumentClient dcClient = new DocumentClient(new Uri(ConfigurationManager.AppSettings["documentURI"]), ConfigurationManager.AppSettings["documentKEY"]);
        Uri CollectionLink = UriFactory.CreateDocumentCollectionUri(ConfigurationManager.AppSettings[DatabaseId], ConfigurationManager.AppSettings[CollectionId]);

        return dcClient.CreateDocumentQuery<T>(CollectionLink, feedOptions);
    }
public IOrderedQueryable QueryToDb(字符串数据库ID、字符串集合ID)
{
DocumentClient dcClient=新的DocumentClient(新Uri(ConfigurationManager.AppSettings[“documentURI”]),ConfigurationManager.AppSettings[“documentKEY”]);
Uri CollectionLink=UriFactory.CreateDocumentCollectionUri(ConfigurationManager.AppSettings[DatabaseId],ConfigurationManager.AppSettings[CollectionId]);
返回dcClient.CreateDocumentQuery(CollectionLink,feedOptions);
}
此错误是否与DocumentDB节流有关?在抛出的异常中,没有任何对HTTP 429状态代码的引用,只有“任务已取消”。

“任务已取消”异常通常是由于与并发性相关的问题引起的

在上面的示例中,我注意到
QueryToDb
在每次调用时都会构造一个新的Azure DocumentDB客户端

需要注意的是,DocumentDB客户端相当重,但也是线程安全的

如果有多个线程调用
QueryToDb
,则可能是应用程序花费太多时间构造和初始化DB客户端,导致异步查询任务被取消


对于多线程应用程序来说,最好将DocumentDB客户机创建为一个单线程,在多个线程之间共享。

无法用该代码复制错误。使用只有2个文档的集合进行测试,因此大小可能很重要。您有多少文档,如何处理返回的IOrderedQueryable?您的收藏中有多种文档类型吗?我的收藏大约有1000个文档。我使用返回的对象生成一些WHERE子句或orderby。在此集合中只有一种类型的文档。实际上,QueryToDb方法不会在每次查询时都实例化一个新客户机,但它使用一个唯一的客户机,我已将其声明为控制台应用程序的“Program”类中的静态变量。您有多少线程?您是手动管理线程的#还是使用线程池来管理?如果线程太多,则运行时可能会花费太多时间切换上下文,而没有足够的时间执行工作,从而导致挂起的任务被取消。