2014-02-13 17 views
1

我有以下代碼,我嘗試重播序列;但PostWorkItem始終爲空;我不明白爲什麼。 下面的代碼給出堆棧溢出錯誤。Rx中的HistoricalScheduler

 Task<List<WorkItem>> WorkItems = DbUtil.GetWorkItems(new List<string>() { WorkItemStatus.NEW, WorkItemStatus.PROCESSING }); 
     Items = WorkItems.Result; 

     replay = Observable.Generate(
       Items.GetEnumerator(), 
       events => events.MoveNext(), 
       events => events, 
       events => events.Current, 
       events => System.TimeSpan.FromMilliseconds(50), 
        var); 

     replay.Subscribe(
      W => 
       PostWorkItem(W) 
      ); 

     //var.AdvanceBy(System.TimeSpan.FromSeconds(1)); 

     var.Start(); 

回答

3

您需要Observable.Generate指定類型參數明確,這樣它不會混淆的非通用的IEnumerator。嘗試更換您的第三行代碼:

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

James Thanks;代碼在您的建議後工作;但是當我使用Scheduler.AdvanceTo(Date.Now)時,這將創建StackOverFlow錯誤。 – user2757350

+0

嗯,我可以告訴你'Observable.Generate'不是遞歸的,所以我非常確定它將取決於你正在使用的枚舉器。我建議你設置一些中斷點並檢查堆棧,看看它有什麼以及它的增長情況。 –

+0

感謝您的建議。通過註釋掉這段代碼,它不會導致堆棧溢出。 // events => events.Current.RequestedDateTime,但我想AdvanceTo直到2月12日,我不能這樣做...我想確保AdvanceTo與所有itemsso的RequesteDateTime相關,只能在2月12日之前重播,下一次迭代我將推進至2月14日... – user2757350