可观察,时间间隔在订阅时不显示结果



我正在尝试为这个可观察序列添加一个时间间隔(即在特定时间跨度生成一个整数序列(,但它似乎不起作用。当我删除时间时,它就会工作。我是否错误地应用了计时器?

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")
);

此代码不显示任何输出,它是否在到达订阅之前得到释放?

但是,如果我有一个带有计时器的 forloop,那么它可以工作。为什么?

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

这是你想要的吗?

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的。

相关内容

  • 没有找到相关文章

最新更新