首页 > 解决方案 > 如何在使用 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 });
  1. 我想在 Execute 方法中打印当前的重试次数。甚至可能吗?这是为了记录目的。要查看哪个重试产生了最佳结果等。请在下一次重试之前随意建议最佳重试计数和 maxDelay。

  2. 在 ShouldRetryOn 方法中,定义要重试的异常的最佳方法是什么?我希望它可以将异常作为案例进行切换,并在每种情况下都返回 true。

标签: c#exceptionazure-sql-databaseretry-logic

解决方案


推荐阅读