【发布时间】:2014-09-13 17:51:00
【问题描述】:
我在 .Net 4.5 中使用 Rx 2。当以下代码运行时,它只是静默退出,而不执行 OnCompleted 委托或显示任何错误。如果我在ToObservable 中使用Scheduler.CurrentThread,它至少会抛出错误并终止程序,此时不执行 OnCompleted 是有意义的。但是当这是在主线程以外的线程中执行时,这种行为似乎是不合理和不可接受的。我错过了什么吗?
static void Main()
{
Enumerable.Range(0, 1)
.ToObservable(Scheduler.Default)
.Subscribe(o => { throw new Exception("blah"); }, () => Console.WriteLine("completed"));
Thread.Sleep(2000);
}
已编辑: 是的,当作为控制台应用程序运行时,无论在哪个线程上执行观察,它都会抛出错误。
但是,当我如下在 NUnit 中运行此代码作为测试时,它会在 2 秒(线程睡眠时间)后静默退出,没有任何错误或消息(预期“完成”)。那么实际上是 NUnit 导致了这个问题吗?
[TestFixture]
class Program
{
[Test]
public void Test()
{
Enumerable.Range(0, 1)
.ToObservable(Scheduler.Default)
.Subscribe(
o => { throw new Exception("blah"); },
() => Console.WriteLine("completed"));
Thread.Sleep(2000);
}
}
【问题讨论】:
标签: c# system.reactive reactive-programming