UniRx没有Observable.Generate()方法

时间:2019-02-01 20:29:11

标签: c# unity3d system.reactive unirx

.NET Reactive Extensions具有一种巧妙的方法,可以使用称为Observable.Generate的corecursion生成序列。

我不能找到在UniRx该方法(统一无扩展)的等效。您能帮我将此代码示例移植到UniRx环境中吗?

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

2 个答案:

答案 0 :(得分:1)

生成是UniRX中未包含的运算符。

您可以尝试使用 Operator Observer Base 或使用 Create 运算符来创建自己的“生成”版本。

您到底想做什么?也许我可以以某种方式帮助您。

答案 1 :(得分:0)

我尝试过,...正在工作。但我不知道可以吗? = 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();
        });
    });
}