是否有可能某些消息总线订阅者在 UI 线程中处理消息,而另一些订阅者在后台线程中处理消息?

Is it possible for some messagebus subscriblers to handle message in UI thread, some others in background thread?

我正在像这样使用 ReactiveUI 的 RegisterScheduler

MessageBus.Current.RegisterScheduler<string>(RxApp.MainThreadScheduler, someContract);

我希望一些消息订阅者(注册此消息的人)在 UI 线程中处理它,但同时,一些其他订阅者在后台线程中处理它。

这是用例:某些消息的订阅者将处理 UI 相关数据,这些数据必须在 UI 线程中发生。但我想尽可能减少 UI 线程的使用,所以我希望在后台线程中进行其他操作(与 UI 无关)。 ReactiveUI 是否可行?

我目前的解决方案是使用2个不同的合同字符串,实际上可以认为是2个不同的消息。可以用,但是两个消息应该一起发出,这让我觉得很无聊。

有什么想法吗?

也许忽略调度程序,或者适当地设置您的默认值(默认值是 CurrentThreadScheduler),然后只使用 ObserveOn 来定义处理程序将在需要时执行的调度程序。

要在 UI 线程上处理:

MessageBus.Current.Listen<string>()
    .ObserveOn(RxApp.MainThreadScheduler)
    .Subscribe(message => { /* ... */ });

在线程池线程上处理:

 MessageBus.Current.Listen<string>()
    .ObserveOn(RxApp.TaskpoolScheduler)
    .Subscribe(message => { /* ... */ });