2017-04-13 98 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()它有帮助。 –