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);
}