实施重试策略时如何捕获 RetryLimitExceeded
How to catch RetryLimitExceeded when implementing a retry policy
我正在尝试为 Azure 中与数据库相关的暂时性错误实施重试策略,但不明白如何在此特定上下文中捕获 RetryLimitExceeded 类型的错误。
详细说明 - 下面关于 msdn 的文章描述了将其设置为 Entity Framework DbConfiguration 的过程,这非常简单。但是,它还指定我们应该处理 RetryLimitExceeded 异常,如果错误不是瞬态相关的或者尝试次数超过限制,则可能会抛出该异常。
https://msdn.microsoft.com/en-us/data/dn456835.aspx
我不明白我应该如何捕获异常 - 我应该将 SetExecutionStrategy 包装在 try catch 中还是我应该全局处理这种错误?或者别的什么?
public class IntranetDBConfiguration : DbConfiguration
{
public IntranetDBConfiguration()
{
SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); //default is 5 retries up to 30 seconds.
}
}
是的,您必须 catch
为上下文提交 SaveChanges()
的异常。你可以尝试这样的事情。
try
{
using (MyEntities context = new MyEntities ())
{
// do your code
MyConfiguration.SuspendExecutionStrategy = true;
context.Entity.Add(entity);
context.SaveChanges();
}
}
catch (Exception ex)
{
logger.Warn("Connection error with database server.", ex);
}
finally
{
//Enable retries again...
MyConfiguration.SuspendExecutionStrategy = false;
}
我正在尝试为 Azure 中与数据库相关的暂时性错误实施重试策略,但不明白如何在此特定上下文中捕获 RetryLimitExceeded 类型的错误。
详细说明 - 下面关于 msdn 的文章描述了将其设置为 Entity Framework DbConfiguration 的过程,这非常简单。但是,它还指定我们应该处理 RetryLimitExceeded 异常,如果错误不是瞬态相关的或者尝试次数超过限制,则可能会抛出该异常。
https://msdn.microsoft.com/en-us/data/dn456835.aspx
我不明白我应该如何捕获异常 - 我应该将 SetExecutionStrategy 包装在 try catch 中还是我应该全局处理这种错误?或者别的什么?
public class IntranetDBConfiguration : DbConfiguration
{
public IntranetDBConfiguration()
{
SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); //default is 5 retries up to 30 seconds.
}
}
是的,您必须 catch
为上下文提交 SaveChanges()
的异常。你可以尝试这样的事情。
try
{
using (MyEntities context = new MyEntities ())
{
// do your code
MyConfiguration.SuspendExecutionStrategy = true;
context.Entity.Add(entity);
context.SaveChanges();
}
}
catch (Exception ex)
{
logger.Warn("Connection error with database server.", ex);
}
finally
{
//Enable retries again...
MyConfiguration.SuspendExecutionStrategy = false;
}