【问题标题】:Naming threads when using Reactive Extensions使用响应式扩展时命名线程
【发布时间】:2013-08-01 17:21:57
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: c# multithreading system.reactive


    【解决方案1】:

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

    // created threads will have names prefixed with "bob"
    someObservable.ObserveOn(new CustomNewThreadScheduler("bob"))...
    

    【讨论】:

    • 这正是我过去所做的,尽管我在切换到 Release 时又换回了池。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多