猿问

可观察的重试机制

我正在尝试使用C#观察值编写重试机制。

  1. 重试具有重试次数和重试间隔

  2. 重试应执行“ OnExecute”方法。

  3. 在每个异常上,它将执行“ 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();

}

不幸的是-它表现不佳:

  1. OnCatch抛出异常时,我不知道如何执行。我尝试了很多方法都没有成功。

  2. OnExecute 似乎不会重复执行(以请求间隔),以防它引发异常。


一只萌萌小番薯
浏览 144回答 1
1回答
随时随地看视频慕课网APP
我要回答