代码之家  ›  专栏  ›  技术社区  ›  oggiman

如何在catch[closed]中为SQL更新表编写一个具有重试功能的面向对象的方法

  •  0
  • oggiman  · 技术社区  · 11 月前

    我需要一个尝试多次更新表的方法。这是我的第一次尝试。

    void UpdateSomeSQLRows(uint retryCount = 3)
    {
        try
        {
            // Some Code
        }
        catch (Exception e)
        {
            retryCount--;
    
            if (retryCount != 0)
                UpdateSomeSQLRows(retryCount);
        }
    }
    

    它是否能有效地使用本机Microsoft sqlclient进行sql更新?

    1 回复  |  直到 11 月前
        1
  •  0
  •   Magnus    11 月前

    有一个图书馆叫 Poly 这是一个很好的方式与许多先进的功能。这也会在最后一次重试尝试后将异常传播到调用函数,而不是静默失败,并且还会在每次尝试之间增加延迟。

    internal class Program
    {
        private static Policy retrySqlPolicy = 
            Policy
                .Handle<Exception>()
                .WaitAndRetry(3, retryAttempt => TimeSpan.FromSeconds(2));
    
        static void Main(string[] args)
        {
            UpdateSomeSQLRows();
        }
    
        static void UpdateSomeSQLRows()
        {
            retrySqlPolicy.Execute(() =>
            {
                // Some Code
            });
        }
    }