System.reactive Rx中的历史调度器

System.reactive Rx中的历史调度器,system.reactive,reactive-programming,System.reactive,Reactive Programming,我有下面的代码,我尝试重放序列;但是PostWorkItem总是为空;我不明白为什么下面的代码给出堆栈溢出错误。 Task WorkItems=DbUtil.GetWorkItems(新列表(){WorkItemStatus.new,WorkItemStatus.PROCESSING}); 项目=工作项。结果; 重播=可观察。生成( Items.GetEnumerator(), events=>events.MoveNext(), 事件=>事件, events=>events.Current,

我有下面的代码,我尝试重放序列;但是PostWorkItem总是为空;我不明白为什么下面的代码给出堆栈溢出错误。

Task WorkItems=DbUtil.GetWorkItems(新列表(){WorkItemStatus.new,WorkItemStatus.PROCESSING});
项目=工作项。结果;
重播=可观察。生成(
Items.GetEnumerator(),
events=>events.MoveNext(),
事件=>事件,
events=>events.Current,
events=>System.TimeSpan.From毫秒(50),
var);
重播,订阅(
W=>
工作后项目(W)
);
//var.AdvanceBy(系统时间跨度自秒(1));
变量Start();

您需要在
Observable.Generate
中明确指定类型参数,以免与非泛型IEnumerator混淆。尝试将第三行代码替换为:

replay = Observable.Generate<IEnumerator<WorkItem>,WorkItem>(
replay=Observable.Generate(

James谢谢;代码根据您的建议运行;但是当我使用Scheduler.AdvanceTo(Date.Now)时然后这就产生了StackOverFlow错误。好吧,我可以告诉你,
可观察。Generate
不是递归的,所以我很确定这将取决于你使用的枚举器。我建议你设置一些断点,检查堆栈,看看堆栈上有什么,以及它是如何增长的。谢谢你的建议。通过注释这段代码,它就可以了不会引发堆栈溢出。//events=>events.Current.RequestedDateTime,但我想将其提前到2月12日。我无法做到这一点……我想确保AdvanceTo与所有项目的RequestedDateTime相关,因此我只能重播到2月12日,然后在下一次迭代中,我将提前到2月14日。。。
replay = Observable.Generate<IEnumerator<WorkItem>,WorkItem>(