У меня есть метод в WebApi, который вызывает Cosmos через SQL API, который возвращает файлы конфигурации процесса, но никогда не вернется. Задача зависает и никогда не заканчивается. Я вижу задачу в окне Threads в Debug. Другие вызовы в тот же контейнер базы данных выполняются просто отлично. После нескольких звонков мне нужно перезапустить IIS, чтобы очистить задачи. Никаких исключений не выбрасывается. Я бегал с и без попыток ловит. Тот же метод, скопированный в другой проект консольного приложения, работает правильно. Есть ли какие-либо известные проблемы с истечением времени космоса с слишком большим результатом? Это должно вернуть только 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;
}