我想将一些命令发送到串口并监听响应。 来自端口的响应可能是格式良好的数据或损坏的数据。在这种情况下,我必须在战略超时后重试发送相同的命令
目前我正在使用while循环来实现这一目标。但是,我正在为我需要发送的所有~30个命令寻找更简单和可重用的方法。
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
}
}
我想实现类似于下面的Generic方法,我可以调用一次,它将负责重试逻辑实现。而不是异常处理我想从串口查询响应。
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);
}
例如:int returnCount = Do(MyMethod,TimeSpan.FromMilliSeconds(300),3);
我如何实现这一目标?