当我查询 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 状态代码的引用,而只有"任务已取消"。
任务已取消"异常通常是由于与并发性相关的问题。
在上面的示例中,我注意到每当调用 Azure DocumentDB 客户端时QueryToDb
都会构造它。
请务必注意,DocumentDB 客户端相当重,但也是线程安全的。
如果您有多个线程调用QueryToDb
- 您的应用程序可能花费太多时间来构造和初始化数据库客户端,从而导致异步查询任务被取消。
多线程应用程序最好将 DocumentDB 客户端创建为跨线程共享的单例。
向上/向外扩展消费者服务。