【UniRx】Observable.Intervalで購読開始直後に値を発行したい

Observable.TimerとObservable.Interval

TimerInterval はどちらも同じように作られています。
Timer は一度だけ通知、 Interval は何度も繰り返して通知というイメージですが、

Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds(1000f))
  .Subscribe(_ => {}).AddTo(this);

このように、ふたつ引数を持たせて、ひとつ目に開始時間、ふたつ目に間隔を指定することで、Timer を使って複数回通知することもできます。
Observable.Interval との違いは開始時(この場合は TimeSpan.Zero を指定しているので購読時すぐ)に値を即時発行するかどうかです。

Timer(TimeSpan.Zero, timespan)
Interval(timespan)
値発行(■)

結論

購読開始直後に値を発行したいときには、Timer の第一引数に TimeSpan.Zero を指定しましょう。

参考

https://github.com/neuecc/UniRx

public static IObservable<long> Timer(TimeSpan dueTime)
{
    return new TimerObservable(dueTime, null, Scheduler.DefaultSchedulers.TimeBasedOperations);
}

public static IObservable<long> Interval(TimeSpan period)
{
    return new TimerObservable(period, period, Scheduler.DefaultSchedulers.TimeBasedOperations);
}

Leave a Reply