查询DocumentDB得到一个"一个任务被取消"错误

时间:2016-06-06 16:29:12

标签: azure-cosmosdb

当我查询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);
    }

这个错误可能与DocumentDB限制有关吗?在抛出的异常中,没有任何对HTTP 429状态代码的引用,但只有&#34;任务被取消&#34;。

1 个答案:

答案 0 :(得分:1)

&#34;任务被取消&#34;异常通常是由于与并发相关的问题。

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

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

如果您有多个线程调用QueryToDb - 您的应用程序可能会花费太多时间构建和初始化数据库客户端,导致异步查询任务被取消。

最好是多线程应用程序将DocumentDB客户端创建为单个跨线程共享的单例。