c# - 如何在使用 SqlAzureExecutionStrategy 执行时获取当前重试次数
问题描述
我目前正在使用 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。
解决方案
推荐阅读
- ios - 如何调用 func renderer(_:didAdd:for:)
- javascript - 在 slideToggle 之后 HTML Canvas 高度默认为 1
- diagnostics - 在 CAPL 中获取诊断信息
- django - 仅包含 Django 模型中的字段。
- c# - asp.net core 2.0 发布生成大量 DLL
- excel - 复制空白/空单元格并粘贴特殊按列标题名称添加到整个列
- c++ - 函数指针作为模板参数
- java - 参数 args.length 是什么意思?
- ecmascript-6 - Promises.resovle 与新的 Promise
- laravel - 如何对 Laravel 功能测试的用户进行身份验证?