我正在尝试使用C#观察值编写重试机制。
重试具有重试次数和重试间隔
重试应执行“ OnExecute”方法。
在每个异常上,它将执行“ OnCatch”方法。
这是我尝试做的事情:
public static IObservable<T> Retry(GenericRetryExecutorRequest<T> request)
{
var source = Observable.Timer(TimeSpan.Zero, request.Interval)
.Select(item =>
{
return request.GenericRetryActions.OnExecute();
});
var retryObservable = source
.Retry(request.RetryCount)
.Catch(source);
return retryObservable;
}
public class GenericRetryExecutorRequest<T>
{
public int RetryCount { get; set; } = 3;
public TimeSpan Interval { get; set; } = new TimeSpan(0,0,0,5);
public IGenericRetryActions<T> GenericRetryActions { get; set; }
}
public interface IGenericRetryActions<out T>
{
T OnExecute();
void OnCatch();
}
不幸的是-它表现不佳:
OnCatch
抛出异常时,我不知道如何执行。我尝试了很多方法都没有成功。
OnExecute
似乎不会重复执行(以请求间隔),以防它引发异常。
相关分类