Observable.TimerとObservable.Interval
Timer
と Interval
はどちらも同じように作られています。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); }