处理OnCompleted with cold observables

时间:2011-09-27 15:07:58

标签: c# asynchronous event-handling system.reactive

Rx中,以下代码似乎没有调用我的OnCompleted操作?

没有“序列已完成”

    static void Main(string[] args)
    {
        var list = new List<int> { 1, 2, 3 };
        var obs = list.ToObservable();
        IDisposable subscription = obs.SubscribeOn(Scheduler.NewThread).Subscribe(p =>
        {
            Console.WriteLine(p.ToString());
            Thread.Sleep(200);
        },
        p => Console.WriteLine("Sequence completed"));
        Console.ReadLine();
        subscription.Dispose();
    }

我在做傻事,因为在控制台窗口中3之后没有打印“序列已完成”?

控制台输出

1
2
3
_

所以,我的问题的主要焦点是如何在迭代这种类型的序列后运行一些代码

  • E.g。在原始列表中的所有元素都已观察之后如何执行Console.WriteLine("Sequence completed"))
  • 请注意,.ToObservable来自IEnumerable(在这种情况下为List<>
  • 订阅在NewThread
  • 上运行

1 个答案:

答案 0 :(得分:3)

问题是.Subscribe的第二个参数是错误回调。只有在观察到元素时出现错误,才会打印“序列已完成”字符串。

以下是更正后的代码:

var list = new List<int> { 1, 2, 3 };
var obs = list.ToObservable();
var subscription = obs.SubscribeOn(Scheduler.NewThread).Subscribe(p =>
    {
        Console.WriteLine(p.ToString());
        Thread.Sleep(200);
    },
    error => Console.WriteLine("Error!"),
    () => Console.WriteLine("sequence completed"));
Console.ReadLine();
subscription.Dispose();