我目前正在使用 SqlAzureExecutionStrategy 在我的数据库事务中实现重试登录。
这是从 SqlAzureExecutionStrategy 继承的自定义策略:
using System;
using System.Data.Entity.SqlServer;
using System.Data.SqlClient;
public class DbExecutionStrategy : SqlAzureExecutionStrategy
{
private const int retryCount = 2;
private static readonly TimeSpan maxDelay = TimeSpan.FromMinutes(1);
public DbExecutionStrategy ()
: base(retryCount, maxDelay)
{
}
public DbExecutionStrategy (int maxRetryCount, TimeSpan maxDelay)
: base(maxRetryCount, maxDelay)
{
}
protected override bool ShouldRetryOn(Exception exception)
{
if(exception.InnerException != null && exception.InnerException is SqlException)
{
return true;
}
return false;
}
}
我正在使用这种自定义策略,例如:
var executionStrategy = new DbExecutionStrategy();
executionStrategy.Execute(() => { some business logic here });
我想在 Execute 方法中打印当前的重试次数。甚至可能吗?这是为了记录目的。要查看哪个重试产生了最佳结果等。请在下一次重试之前随意建议最佳重试计数和 maxDelay。
在 ShouldRetryOn 方法中,定义要重试的异常的最佳方法是什么?我希望它可以将异常作为案例进行切换,并在每种情况下都返回 true。