以下代碼將結果延遲2秒。我想要的是立即返回結果,但每2秒發射一個新的觀察值。我錯過了什麼?Observable.Generate延遲結果
輸出:
**The current output is:**
05: 1. Run
07 Result: 1
07: 2. Run
09 Result: 2
09: 3. Run
11 Result: 3
**Desired output is:**
05: 1. Run
05 Result: 1
07: 2. Run
07 Result: 2
09: 3. Run
09 Result: 3
CODE:
var sources = Enumerable.Range(1, 8).Select(i =>
{
Console.WriteLine("{0}: {1}. Run", DateTimeOffset.Now.ToString("ss"), i);
return Observable.Return(i, CurrentThreadScheduler.Instance);
});
Observable.Generate(sources.GetEnumerator(), e => e.MoveNext(), e => e, e => e.Current, e => TimeSpan.FromMilliseconds(2000), ThreadPoolScheduler.Instance)
.Merge()
.Timestamp()
.Do(r =>
{
Console.WriteLine("{0} Result: {1}{2}", r.Timestamp.ToString("ss"), r.Value, Environment.NewLine);
},
ex =>
{
Console.WriteLine(ex.ToString());
},
() =>
{
Console.WriteLine("Completed");
})
.Subscribe();
這真的不是完全清楚你在這裏以後有什麼 - 我相信保羅的回答您的評論表示您希望可變數據驅動的區間,但除此之外,還有(給我訓練有素的Rx眼睛)代碼中有很多「奇怪的東西」。也許用非rx的術語解釋你試圖達到的目標是有用的。例如,它並不完全清楚爲什麼你要爲'sources'創建'IEnumerable',因爲它看起來像'IEnumerable <>'會做的。目前還不清楚'sources'是否應該包含指示期望間隔的數據。 –