У меня следующая логика:
public async Task UpdateData(DbContext context)
{
try
{
await LongUpdate(context);
}
catch (Exception e)
{
try
{
await context.Database.ExecuteSqlCommandAsync($@"update d set d.UpdatedAt = GETDATE() from SomeTable d where id > 11");
}
catch (Exception ex)
{
throw;
}
}
}
// this operations takes about 1 minute
private static async Task<int> LongUpdate(DbContext context)
{
context.Database.CommandTimeout = 5; // change this to 15 to see MultipleActiveResultSets exception
return await context.Database.SqlQuery<int>($@"update otherTable set UpdatedAt = GETDATE();SELECT @@ROWCOUNT").FirstOrDefaultAsync();
}
Как показано выше, ожидаются две операции обновления.LongUpdate занимает больше минуты.
Когда для тайм-аута установлено значение 5 с: LongUpdate генерирует исключение тайм-аута и второе обновление успешно выполняется.
Когда я увеличиваю тайм-аут до 15 с или более: LongUpdate генерирует исключение тайм-аута, но второе обновление немедленно выдает: System.InvalidOperationException: соединение не поддерживает MultipleActiveResultSets ..
Разве не следует ожидать предотвращения этого исключения?Почему это зависит от значения времени ожидания?