3

我经常使用多任务处理,并且正在努力将 Reactive Extensions 添加到我的工具集中。但是,我更喜欢命名线程,以便我可以更好地了解当我中断等时正在运行的线程。总的来说,它会更好。但是,当我使用带有 SubscribeOn 和 ObserveOn 等的响应式扩展时,我还没有找到一种命名线程的好方法。

有任何想法吗?

4

2 回答 2

4

如果您正在使用NewThreadScheduleralot,您可以创建一个自定义Thread它创建的子类,然后在使用时使用您的自定义调度程序ObserveOnSubscribeOn...

// created threads will have names prefixed with "bob"
someObservable.ObserveOn(new CustomNewThreadScheduler("bob"))...
于 2013-08-01T18:10:47.590 回答
1

使用 Rx 时,大部分“线程”分为三个阵营:

  1. SubscribeOnor的目标ObserveOn,将基于框架指定的SynchronizationContext。如果您使用用户界面,这通常是“主 UI”线程,因此命名主线程将为您提供正确的名称。
  2. ThreadPool 线程,实际上不能(或至少通常不应该)被命名,因为它们没有出现和消失的特定生命周期。如果在 ThreadPool 线程上引发了一个事件并被观察,则没有很好的方法来“命名”这些线程。
  3. 您自己创建的线程,如果您愿意,可以轻松命名。

由于 2/3 的选项允许您提供名称,因此您始终可以命名这些线程,然后假设在调试期间观察到的任何未命名线程都是 ThreadPool 托管线程。

于 2013-08-01T17:32:35.570 回答