2017-04-13 96 views
0

我想添加一個時間間隔到這個可觀察序列(這是在特定的時間段產生一個整數序列),但它似乎沒有工作。當我刪除時間,那麼它的工作時間。我錯誤地應用了計時器嗎?可觀察的時間間隔不顯示訂閱的結果

var timer = Observable.Interval(TimeSpan.FromSeconds(2)).Take(4); 
var nums = Observable.Range(1,1200).Where(a => a % 2 == 0); 
var sourcenumbs = timer.SelectMany(nums); 


var results = sourcenumbs.Subscribe(
       x => Console.WriteLine("OnNext: {0}",x), 
       ex => Console.WriteLine("OnError: {0}",ex.Message), 
      () => Console.WriteLine("OnComplete") 
); 

此代碼不顯示輸出,它是否在達到Subscribe之前得到Dispose?

但是,如果我有一個計時器forloop它然後它的作品。爲什麼?

for (int i = 0; i < 10; i++) 
{ 
    Thread.Sleep(TimeSpan.FromSeconds(0.9)); 
} 
+0

你是什麼意思「添加一個時間間隔到這個可觀察序列」。你期望的輸出是什麼? for循環如何與可觀察序列相關? – Euphoric

+0

@Euphoric我想從1,1200每2秒偶數,沒有'Observable.Interval'它工作正常,但我想添加一個計時器。 –

回答

0

這是你想要的嗎?

static void Main(string[] args) 
{ 
    Execute(); 

    Console.ReadKey(); 
} 

private static async void Execute() 
{ 
    var intervals = Observable.Interval(TimeSpan.FromSeconds(2)).StartWith(0); 
    var evenNumbers = Enumerable.Range(1, 1200).Where(a => a % 2 == 0); 

    var evenNumbersAtIntervals = intervals.Zip(evenNumbers, (_, num) => num); 

    try 
    { 
     await evenNumbersAtIntervals.ForEachAsync(
      x => Console.WriteLine("OnNext: {0}", x) 
     ); 

     Console.WriteLine("Complete"); 
    } 
    catch(Exception e) 
    { 
     Console.WriteLine("Exception " + e); 
    } 
} 

注意到,數字Enumerable而不是Observable

+0

我試過這個,但它仍然沒有在控制檯中顯示任何東西。 –

+0

@SeekAddo您必須停止關閉控制檯,因爲代碼異步運行。最簡單的方法是Console.ReadKey()。看我的編輯。你寫的是 – Euphoric

+0

。我使用Rider,所以控制檯不像Visual sutdio那樣關閉,但是使用Console.ReadKey()它有幫助。 –