gpt4 book ai didi

c# - 捕获 SQLException 并重试的良好 C# 编码风格是什么

转载 作者:IT王子 更新时间:2023-10-29 04:41:45 25 4
gpt4 key购买 nike

我有一个调用 SQLServer 函数来对表执行自由文本搜索的方法。该函数偶尔会在第一次调用时导致 SQLException:“全文查询字符串的断词超时”。所以通常我想重试该请求,因为它会在后续请求中成功。什么是构建重试逻辑的好风格。目前我有以下内容:

var retryCount = 0;
var results = new List<UserSummaryDto>();
using (var ctx = new UsersDataContext(ConfigurationManager.ConnectionStrings[CONNECTION_STRING_KEY].ConnectionString))
{
for (; ; )
{
try
{
results = ctx.SearchPhoneList(value, maxRows)
.Select(user => user.ToDto())
.ToList();
break;
}
catch (SqlException)
{
retryCount++;
if (retryCount > MAX_RETRY) throw;
}
}
}

return results;

最佳答案

我会将异常处理更改为仅在出现某些错误时重试:

  • 1204、1205 死锁
  • -2超时
  • -1 连接断开

这些是基本的“可重试”错误

catch (SqlException ex)
{
if !(ex.Number == 1205 || ex.Number == 1204 || ... )
{
throw
}
retryCount++;
if (retryCount > MAX_RETRY) throw;
}

编辑,我完全忘记了等待,这样你就不用敲 SQL 框了:

  • 添加 500 毫秒等待死锁
  • 添加 5 秒的超时延迟

编辑 2:

我是开发人员 DBA,不怎么用 C#。我的回答是纠正调用的异常处理......

关于c# - 捕获 SQLException 并重试的良好 C# 编码风格是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com