例如,我使用一个多线程单例WCF服务,在PRISM的EventAggregator上发布事件,有效负载是不可变的(只是数据),每个具有Dispatcher的线程都可以优雅地检索到事件,而不会在自己的Dispatcher中出现死锁。 (不仅是UI线程,还包括具有数据库调用、服务调用、日志或其他慢调用的线程,因为我不想冻结UI)。
但我的问题是,这个Dispatcher与WPF耦合在一起,因此当我在各处使用它时,我感到有点内疚,我感觉Dispatcher并不是为我的使用案例而创建的。
是否存在另一个未与WPF耦合的Dispatcher实现?或者滥用它是否OK?
谢谢,
更新
Paul Stovell给我的解决方案是创建一个IDispatcher接口和一个适配器来适配Wpf Dispatcher,这样测试就更容易了! 这个解决方案对我很好,因为我重构了我的测试,现在可以在我的测试中使用SynchronousDispatcherAdapter(感谢它,我不必在我的测试中使用WPF的Dispatcher)。
使用Dispatcher而不是BackgroundWorker是有意义的,因为我正在使用多发布者/订阅者模式(使用PRISM),并且由于Dispatcher,每个事件处理程序都在订阅它们的线程上调用。这意味着多线程问题可能发生的唯一点是在我的事件有效负载处(我使它不可变)。
我的不同线程之间不直接通信,它们只能发布和订阅事件。 因此,数据库调用、日志调用、服务调用、UI调用在不同线程上运行,并且彼此不知道(它们只知道它们订阅和发布的事件)。
当我从我的UI向存储库发出一些调用时,后台工作者将有意义。
但我希望找到一种设计,而无需使用BackgroundWorker,因为我更喜欢使用这种订阅/发布模式(我认为这使我的代码更易读)。