【问题标题】:Observable with Time interval not displaying results on subscribe可观察的时间间隔不显示订阅结果
【发布时间】:2017-04-13 11:51:23
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “向这个 Observable 序列添加时间间隔”是什么意思。您期望的输出是什么? for 循环与可观察序列有什么关系?
  • @Euphoric 我想要每 2 秒从 1 到 1200 的偶数,没有 Observable.Interval 它工作正常,但我想给它添加一个计时器。

标签: c# system.reactive


【解决方案1】:

这是你想要的吗?

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

【讨论】:

  • 我试过了,但它仍然没有在控制台中显示任何内容。
  • @SeekAddo 您必须阻止控制台关闭,因为代码是异步运行的。最简单的方法是 Console.ReadKey()。查看我的编辑。
  • 你写的。我正在使用 Rider,因此控制台不会像在视觉 sutdio 中那样关闭,但使用 Console.ReadKey() 会有所帮助。
  • 在订阅服务器上使用await 怎么样,或者唯一的方法是使用Console.ReadKey。我的意思是如果在一个真实的应用程序中,它必须将输出发送到另一个数据。
  • @SeekAddo 如果你想等待序列的完成,你应该使用ForEachAsync而不是Subsribe。见编辑。
猜你喜欢
  • 2018-02-22
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多