我经常使用多任务处理,我正在努力将反应式扩展添加到我的工具集中。然而,我更喜欢命名线程,这样我就可以更好地了解当我中断等时运行的线程是什么。总的来说,这更好。然而,当我使用SubscribeOn和ObserveOn等的反应式扩展时,我还没有找到一个很好的方法来命名线程。
有什么想法吗?
如果您同时使用NewThreadScheduler
,您可以为其创建一个子类来自定义它创建的Thread
,然后在使用ObserveOn
或SubscribeOn
时使用您的自定义调度器。。。
// created threads will have names prefixed with "bob"
someObservable.ObserveOn(new CustomNewThreadScheduler("bob"))...
使用Rx时,大多数"线程"分为三个阵营:
SubscribeOn
或ObserveOn
的目标,将基于框架指定的SynchronizationContext
。如果您使用用户界面,这通常是"主UI"线程,因此命名主线程将为您提供正确的名称- ThreadPool线程,实际上不能(或者至少通常不应该)命名,因为它们没有出现和消失的特定生命周期。如果在ThreadPool线程上引发了一个事件并被观察到,那么就没有好的方法来"命名"这些线程
- 一个你自己创建的线程,如果你愿意,可以很容易地命名
由于2/3的选项允许您提供名称,因此您可以始终命名这些线程,然后假设调试期间监视的任何未命名线程都是ThreadPool托管线程。