为了账号安全,请及时绑定邮箱和手机立即绑定

带有 ASP.NET Web 表单的 Azure CosmosDB SDK v3

带有 ASP.NET Web 表单的 Azure CosmosDB SDK v3

C#
慕婉清6462132 2023-09-16 16:04:24
我对以下代码有问题,在控制台应用程序项目中运行良好,但在 ASP.NET Web 窗体项目中运行不佳,两者都针对 .NET Framework 4.7.2。目标是使用最新的 Azure Cosmos DB SDK (v3) 获取容器中的所有文档,而不指定类型(使用动态)。我尝试同时针对模拟器(最新版本 2.4.5)和 Azure Cosmos 服务。在 ASP.NET 项目中,queryResultSetIterator.ReadNextAsync().Result 的执行永远不会结束(没有超时)。string endpointUri = "https://localhost:8081";string primaryKey = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";string database = "SendGridEvents";string collection = "SendGridEvents";using (CosmosClient client = new CosmosClient(endpointUri, primaryKey)){    Container container = client.GetDatabase(database).GetContainer(collection);    QueryDefinition queryDefinition = new QueryDefinition("SELECT * FROM c");    FeedIterator<dynamic> queryResultSetIterator = container.GetItemQueryIterator<dynamic>(queryDefinition);    List<dynamic> documents = new List<dynamic>();    while (queryResultSetIterator.HasMoreResults)    {        FeedResponse<dynamic> currentResultSet = queryResultSetIterator.ReadNextAsync().Result;        foreach (var document in currentResultSet)        {            documents.Add(document);        }    }}
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

这是由于使用有问题的.Result.

TL;DR 是您阻塞了 UI 线程中的异步调用,从而导致了死锁。您需要像这样正确等待您的电话:

FeedResponse<dynamic> currentResultSet = await queryResultSetIterator.ReadNextAsync();

如果您使用该方法,您可以从技术上阻止该调用ConfigureAwait(false),但 v3 SDK 不会将此调用一直级联到网络调用,因此不会产生任何影响。WebForms 允许您拥有异步处理程序,因此您可以使方法异步并重试。


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信