C# 重构重试逻辑模式需要帮助吗
我想向串行端口发送一些命令并侦听响应。 来自端口的响应可能是格式良好的数据或损坏的数据。在这种情况下,我必须在策略超时后重试发送相同的命令 目前,我正在使用while循环来实现这一点。然而,我正在寻找一种更简单和可重用的方法,用于我需要发送的所有~30个命令C# 重构重试逻辑模式需要帮助吗,c#,generics,C#,Generics,我想向串行端口发送一些命令并侦听响应。 来自端口的响应可能是格式良好的数据或损坏的数据。在这种情况下,我必须在策略超时后重试发送相同的命令 目前,我正在使用while循环来实现这一点。然而,我正在寻找一种更简单和可重用的方法,用于我需要发送的所有~30个命令 int retryCount = 3; while(retryCount > 0){ _SerialPort.WriteLine("$0\r"); Thread.Sleep(300); //Check response
int retryCount = 3;
while(retryCount > 0){
_SerialPort.WriteLine("$0\r");
Thread.Sleep(300);
//Check response
RESPONSE_STATE iResponse = ProcessResponse();
if (iResponse == RESPONSE_STATE.NOERROR)
{
//process response
break;
}
else
{
retryCount--;
//repeat operation
}
}
我想实现一个类似于下面的通用方法,我可以调用一次,它将负责重试逻辑实现。我想查询来自串行端口的响应,而不是异常处理
public T Do<T>(Func<T> action, TimeSpan retryInterval, int retryCount = 3)
{
var exceptions = new List<Exception>();
for (int retry = 0; retry < retryCount; retry++)
{
try
{
if (retry > 0)
Thread.Sleep(retryInterval);
return action();
}
catch (Exception ex)
{
exceptions.Add(ex);
}
}
throw new AggregateException(exceptions);
}
public T Do(Func操作,TimeSpan retryInterval,int retryCount=3)
{
var exceptions=新列表();
for(int retry=0;retry0)
睡眠(重试区间);
返回动作();
}
捕获(例外情况除外)
{
例外情况。添加(ex);
}
}
抛出新的AggregateException(异常);
}
例如:intreturncount=Do(MyMethod,TimeSpan.frommilluses(300),3)代码>
如何实现这一点?问题是什么?您的解决方案应该可以工作我如何修改此重试逻辑以调用基于ProcessResponse()的方法,而不是在出现异常时调用Check out polly: