1

.NET Reactive Extensions has a neat method to generate sequences using corecursion which is called Observable.Generate.

I can't find an equivalent for that method in UniRx (Unity Reactive Extensions). Could you please help me to port this code sample into UniRx environment?

public static IObservable<long> Timer(TimeSpan dueTime)
{
    return Observable.Generate(
        0L,
        i => i < 1,
        i => i + 1,
        i => i,
        i => dueTime
    );
}
nipunasudha
  • 2,427
  • 2
  • 21
  • 46

2 Answers2

1

Generate is an operator that's not featured into UniRX.

You can try to create your own version of the Generate by using Operator Observer Base or use the Create operator.

What are you trying to do exactly? Maybe I can help you in some way.

0

I tried and ... It is work. But I don't know is it OK? =D

public static IObservable<DateTime> CreateRandomTimer(int minValue, int maxValue)
{
    return Observable.CreateSafe<DateTime>(observer =>
    {
        var random = new Random();

        var timer = new Timer
        {
            Enabled = true,
            Interval = random.Next(minValue, maxValue) * 1000
        };
        
        void OnTimerElapsed(object sender, ElapsedEventArgs e)
        {
            observer.OnNext(e.SignalTime);

            var currentTimer = (Timer) sender;
            currentTimer.Stop();
            currentTimer.Interval = random.Next(minValue, maxValue) * 1000;
            currentTimer.Start();
        }

        timer.Elapsed += OnTimerElapsed;
        timer.Start();

        return Disposable.Create(() =>
        {
            timer.Elapsed -= OnTimerElapsed;
            timer.Dispose();
        });
    });
}