.NET Reactive Extensions 有一个简洁的方法,使用 corecursion 生成序列,称为 Observable.Generate。
我在UniRx(Unity Reactive Extensions)中找不到该方法的等效项。你能帮我把这个代码示例移植到 UniRx 环境中吗?
public static IObservable<long> Timer(TimeSpan dueTime)
{
return Observable.Generate(
0L,
i => i < 1,
i => i + 1,
i => i,
i => dueTime
);
}
Generate 是一个 UniRX 中没有的运算符。
您可以尝试使用操作员观察者库或使用创建运算符创建自己的生成版本。
你到底想做什么?也许我可以以某种方式帮助你。
我试过了...这是工作。但我不知道可以吗?=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();
});
});
}