我有以下逻辑:
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需要超过一分钟的时间。
当超时设置为5s时: LongUpdate抛出超时异常,第二次更新成功执行。
当我将超时时间增加到15秒或更长时间时: LongUpdate引发超时异常,但第二次更新立即引发: System.InvalidOperationException:该连接不支持MultipleActiveResultSets。
是否正在等待阻止此异常? 为什么这取决于超时值?