c# - Cosmos DB 调用永远不会通过异步调用返回

标签 c# azure azure-cosmosdb

我在 WebApi 中有一个方法,它通过 SQL API 调用 Cosmos,该方法返回进程配置文件,但永远不会返回。任务挂起并且永远不会完成。我可以在“调试”的“线程”窗口中看到该任务。对同一数据库容器的其他调用运行得很好。几次调用后,我必须重新启动 IIS 才能清除任务。不会引发任何异常。我已经在有或没有 try catch 的情况下运行了它。复制到另一个控制台应用程序项目中的相同方法可以正常工作。是否存在任何已知的 Cosmos 超时导致结果过大的问题?这应该只返回 2 项。该行为与实时 Cosmos DB 和本地运行的 Cosmos 模拟器相同。

我正在使用最新的 Cosmos 软件包。

<package id="Microsoft.Azure.Cosmos" version="3.3.2" targetFramework="net472" />

构造函数

client = new CosmosClient(url, primaryKey, new CosmosClientOptions()
{
    RequestTimeout = new TimeSpan(0, 0, 20),
    ApplicationRegion = "West US 2",
    ConnectionMode = ConnectionMode.Gateway,
    GatewayModeMaxConnectionLimit = 1000,
    MaxRetryAttemptsOnRateLimitedRequests = 1000,
});

database = client.GetDatabase("MyDatabase");
container = configDatabase.GetContainer("Configs");

此方法永远不会从await items.ReadNextAsync()返回

public async Task<Dictionary<int, string>> GetConfigurationList()
{
   var values = new Dictionary<int, string>();
   var query = new QueryDefinition("SELECT c.ConfigId, c.ConfigDescription FROM c where c.DataSourceType='CSV'");

   var items = container.GetItemQueryIterator<(int ConfigId, string ConfigDescription )>(query);

   while (items.HasMoreResults)
   {
       FeedResponse<(int ConfigId, string ConfigDescription )> configs = await items.ReadNextAsync();

       foreach (var item in configs)
       {
            values.Add(item.ConfigId, item.ConfigDescription);
        }
    }
    return values;
}

这个方法每次都运行良好

public async Task<LetterConfiguration> GetConfiguration(int id)
{
  var query = new QueryDefinition("SELECT * FROM c where c.ConfigId= @id").WithParameter("@id",id);

  var configItems = container.GetItemQueryIterator<ConfigFile>(query);

  while (configItems.HasMoreResults)
  {
     FeedResponse<ConfigFile> configs = await configItems.ReadNextAsync();
     if(configs.Count == 1)
     {
        return configs.FirstOrDefault();
     }
  }
  return null;
}

最佳答案

这最终是调用存储库方法的 Controller 中缺少等待。感谢大家的意见。

关于c# - Cosmos DB 调用永远不会通过异步调用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612908/

相关文章:

Azure-部署到阶段忽略服务配置

azure - 将 netcoreapp1.1 部署到 Azure

azure - 如何使用容器名称中的破折号查询 Cosmos DB

azure-cosmosdb - Gremlin 查询将顶点与不相关的顶点组合 CosmosDB

java - 使用 Key Vault 中的 key 连接到 Cosmos

c# - UWP 应用程序更快地加载图像?

c# - 显示对象的内容

azure - 使用 PowerShell 和应用程序环境变量从 Azure 批处理自定义事件调用 PowerShell 脚本

c# - C# .net 中的这个声明是什么意思?

c# - 找不到适合指定文化或中性文化的任何资源