С одной стороны, если это работает ... пожимает плечами .С другой стороны ...
Observable.Generate
должно быть похоже на цикл for со встроенными необязательными временными интервалами. Так что если вы хотите перебирать целые числа 1-10, приостанавливая i * 100 миллисекунд между каждой итерацией, вы должны сделать следующее:
var forLoop = Observable.Generate(
1,
i => i <= 10,
i => i + 1,
i => i,
i => TimeSpan.FromMilliseconds(i * 100)
)
Приятно то, что Rx управляет состоянием итератора для вас, и вы можете видеть все это.Вы также можете добиться того же эффекта с помощью чего-то подобного:
var opaqueForLoop = Observable.Generate(
GetFirstValue(),
_ => CheckIfDone(),
_ => GetNextValue(),
i => SaveCurrentValue(i),
_ => GetNextTimespan()
)
Но вам придется реализовать эти методы, и у вас будет немного ненужных спагетти.
Ваш код больше похож напоследний, чем первый.Это может быть необходимо, в зависимости от вашей проблемы, я действительно понятия не имею.
Единственное, что вы можете явно сделать, это заменить тип итератора на Unit
и значение на Unit.Default
.Поскольку вы вообще не используете это значение, вы можете использовать явно бесполезное значение, чтобы прояснить это.