相关疑难解决方法(0)

写一个Rx"RetryAfter"扩展方法

IntroToRx书中,作者建议为I/O编写一个"智能"重试,在一段时间后重试I/O请求,如网络请求.

这是确切的段落:

添加到您自己的库的有用扩展方法可能是"Back Off and Retry"方法.我与之合作过的团队在执行I/O时发现了这样一个特性,尤其是网络请求.这个概念是尝试,并在失败时等待一段时间,然后再试一次.您的此方法版本可能会考虑您要重试的异常类型,以及重试的最大次数.您甚至可能希望延长等待时间,以便在每次后续重试时不那么激进.

不幸的是,我无法弄清楚如何编写这种方法.:(

c# system.reactive

22
推荐指数
2
解决办法
4808
查看次数

Rx后退并重试

这基于此SO中提供的代码:编写Rx"RetryAfter"扩展方法

我正在使用Markus Olsson的代码(目前仅进行评估),之前有人要求我试图在Github上抓住Markus,但是在我工作的地方被阻止了,所以我觉得我唯一能做的就是问在这里.很抱歉,如果这与任何人都很糟糕.

所以我在一个小的演示中使用以下代码:

class Attempt1
{
    private static bool shouldThrow = true;

    static void Main(string[] args)
    {
        Generate().RetryWithBackoffStrategy(3,
               MyRxExtensions.ExponentialBackoff,
            ex =>
            {
                return ex is NullReferenceException;
            }, Scheduler.TaskPool)
            .Subscribe(
                OnNext,
                OnError
            );

        Console.ReadLine();
    }

    private static void OnNext(int val)
    {
        Console.WriteLine("subscriber value is {0} which was seen on threadId:{1}",
            val, Thread.CurrentThread.ManagedThreadId);
    }

    private static void OnError(Exception ex)
    {
        Console.WriteLine("subscriber bad {0}, which was seen on threadId:{1}",
            ex.GetType(),
            Thread.CurrentThread.ManagedThreadId);
    }

    static IObservable<int> Generate()
    {
        return Observable.Create<int>(
            o =>
            { …
Run Code Online (Sandbox Code Playgroud)

c# reactive-programming system.reactive

9
推荐指数
2
解决办法
2990
查看次数

标签 统计

c# ×2

system.reactive ×2

reactive-programming ×1