- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 RX 的新手,正在尝试一些示例,关于为什么订阅中的 Console.writeLine 没有被调用有什么想法吗?
var obs = Observable.Create(i => {
while(true)
{
Thread.Sleep(250);
i.OnNext(2.0);
}
return () => { };
})
.SubscribeOn(Scheduler.TaskPool)
.ObserveOn(Scheduler.CurrentThread)
.Subscribe(i =>
{
Console.WriteLine("Inside Subscribe");
});
如果我删除
.ObserveOn(Scheduler.CurrentThread)
线路一切正常吗?
谢谢
最佳答案
正如我提到的,SubscribeOn
和 ObserveOn
并不是最好的方法;我强烈建议您通读这篇文章:
基本上,SubscribeOn
告诉系统在什么上下文中执行实际的订阅/取消订阅连接,而 ObserveOn
告诉系统在新值出现时“执行为”什么上下文到达源头。
首先,请允许我稍微调整一下您的示例:
Console.WriteLine("Start Thread ID:{0}", Thread.CurrentThread.ManagedThreadId);
var subscription = Observable.Create<double>(i =>
{
Console.WriteLine("Observable thread ID:{0}", Thread.CurrentThread.ManagedThreadId);
while(true)
{
Console.WriteLine("Pushing values from thread {0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(250);
i.OnNext(2.0);
}
return () => { };
})
.SubscribeOn(Scheduler.TaskPool)
.ObserveOn(Scheduler.CurrentThread)
.Subscribe(i =>
{
Console.WriteLine("Subscribable thread ID:{0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Inside Subscribe");
});
Console.ReadLine();
subscription.Dispose();
如果你运行它,你会看到如下内容:
Start Thread ID:21
Observable thread ID:23
Pushing values from thread 23
Pushing values from thread 23
Pushing values from thread 23
Pushing values from thread 23
现在让我们交换 ObserveOn
和 SubscribeOn
的线程:
.SubscribeOn(Scheduler.CurrentThread)
.ObserveOn(Scheduler.TaskPool)
现在我们得到:
Start Thread ID:26
Observable thread ID:26
Pushing values from thread 26
Pushing values from thread 26
Subscribable thread ID:27
Inside Subscribe
Pushing values from thread 26
Subscribable thread ID:27
Inside Subscribe
Pushing values from thread 26
Subscribable thread ID:27
Inside Subscribe
关于c# - RX ObserveOn 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382312/
我有一个 View 模型,它在与 UI 线程分开的线程上触发各种对象的可观察对象。同时,有订阅这些可观察对象的 View 代码,需要更新 UI 线程上的控件。 就编码风格而言,使用 ObserveOn
我是 RX 的新手,正在尝试一些示例,关于为什么订阅中的 Console.writeLine 没有被调用有什么想法吗? var obs = Observable.Create(i => {
在 Scala 中,我编写了两个 MongoDB 可观察对象,并在传递自定义执行上下文时调用了 observeOn。在第一个可观察对象上调用 observeOn,但自定义执行上下文不会传播到第二个可观
我正在尝试使用 Rx 并行处理项目。看来我不能告诉 Rx 并行运行我的观察者的 OnNext() 。下面是测试代码来演示 [Test] public void ObservableObserveOnN
我刚刚发现了 SubscribeOn,这让我想知道我是否应该使用它而不是 ObserveOn。谷歌带了我here和 here ,但两者都没有帮助我理解差异:它看起来非常微妙。 (在我的上下文中,我在非
基于阅读这个问题:What's the difference between SubscribeOn and ObserveOnObserveOn 设置代码在 Subscribe 处理程序中的位置被执
我有以下代码 Observable.just(10) .doOnTerminate(() -> Log.d("LOG", "ON TERMINATE"))
我正在尝试使用 .net Observable 类实现一个简单的观察者模式。我有这样的代码: Observable.FromEventPattern( Instance.User, "
我对在可观察对象上调用 subscribeOn 和 observeOn 方法的顺序有点困惑。我读了几篇文章,一个人说没关系,只是在他的例子中使用了东西,其他人说这很重要。所以这是我的问题: 例如: s
我正在开发华为 HarmonyOS 应用程序,我正在尝试使用 RxJava 为后台任务实现一个基类。我的问题是我不知道如何在主线程上观察。 在常规 Android 上,我会使用 AndroidSche
Scheduling and Threading Intro to Rx 部分说 the use of SubscribeOn and ObserveOn should only be invoked
也许我只是真正了解 subscribeOn 和 observeOn 的内部工作原理,但我最近遇到了一些非常奇怪的事情。我的印象是,subscribeOn 决定了调度程序最初开始处理的位置(特别是当我们
请看下面的代码: var obs = Observable.Start(() => LongRunningMethodToRetrieveData()); obs.Subscribe(x => M
基本上我的 Android 应用程序有一些元数据需要在不同的情况下报告给后端服务器: data class SearchMetaData( val searchId: String?,
我已经声明: Subject mBehaviorSubject = BehaviorSubject.createDefault("default").toSerialized(); 似乎工作正常。但我
有人可以帮助解释为什么当我“阻塞并继续”观察者的 onNext 序列订阅了一个具有时间可观察序列的缓冲区时,Scheduler.NewThread 不再适用吗? 例如: 如果我通过缓冲一个数字序列 v
我遇到了一个问题,我的可观察对象在 IO 线程上订阅并在 android 主 (UI) 线程上观察,但 doFinally 运算符在 IO 线程上运行,它需要在 UI 线程上运行。 用例几乎和这个me
我有一个调用 Web 服务的方法,我认为它在 IO 线程上运行,直到服务停止并且 UI 卡住。 所以我开始了一些简单的测试来检查线程 implementation 'io.reactivex.rxja
当我使用 RxAndroid 和 .observeOn(AndroidSchedulers.mainThread()),并使用 Android Studio 在模拟器上运行测试时,整个测试运行崩溃:
我有一个像这样的简单流: Observable.error(Exception()).startWith(1).subscribe { println("Item is $it")
我是一名优秀的程序员,十分优秀!