@ afrischke прав. Похоже, это связано с использованием System.Timers.Timer
за кулисами для планирования поколений, когда вы не указываете другой планировщик. Первоначально я получил те же результаты, что и вы, и, в частности, я отметил, что он не генерирует какой-либо измеримой активности процессора. Когда я изменяю код на следующий, я (вероятно, не удивительно) получаю значительно большее число:
var generator = Observable.Generate(0, i => true, i => 1, i => 1, i => TimeSpan.FromTicks(1));
var disposable = generator.Subscribe(i => Interlocked.Increment(ref x));
Я думаю, что происходит то, что Наблюдаемая подчиняется букве закона - она планирует следующее поколение на по крайней мере в миллисекунде, но не раньше. На практике это оказывается больше на расстоянии 10 мс.