在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
_
所以,我的问题的主要焦点是如何在迭代这种类型的序列后运行一些代码?
Console.WriteLine("Sequence completed"))
? .ToObservable
来自IEnumerable
(在这种情况下为List<>
)NewThread
答案 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();