【问题标题】:Subject<T> stops publishing itemsSubject<T> 停止发布项目
【发布时间】:2011-06-26 07:25:33
【问题描述】:

我有一个 Subject&lt;T&gt;,我通过 OnNext 将项目发布到其中,一段时间后,在负载下,我得到了这个异常:

System.NullReferenceException: Object reference not set to an instance of an object
at System.Diagnostics.ExceptionExtensions.PrepareForRethrow (System.Exception exception) [0x00000] in <filename unknown>:0
at System.Concurrency.AsyncLock.Wait (System.Action action) [0x00000] in <filename unknown>:0
at System.Concurrency.Scheduler+<>c__DisplayClass4.<Schedule>b__0 () [0x00000] in <filename unknown>:0
at System.Concurrency.ImmediateScheduler.Schedule (System.Action action) [0x00000] in <filename unknown>:0
at System.Concurrency.Scheduler.Schedule (IScheduler scheduler, System.Action`1 action) [0x00000] in <filename unknown>:0
at System.ScheduledObserver`1[GetNotifyd.Superfeedr.FeedItem].EnsureActive () [0x00000] in <filename unknown>:0
at System.Collections.Generic.Subject`1[GetNotifyd.Superfeedr.FeedItem].OnNext (GetNotifyd.Superfeedr.FeedItem value) [0x00000] in <filename unknown>:0

发生这种情况后,我仍然可以通过OnNext 发布项目,但我的订阅者不再收到任何东西。这是使用 MS 的 .NET 3.5 Reactive Extensions DLL 在单声道 2.10.1 下运行的(即我不认为它是正在消亡的单声道代码)。当我在 Windows 上尝试时,我没有看到这种情况发生,但我没有在那里运行相同的负载。 OnNext 的参数项肯定不为空,所以这不是原因。

知道是什么原因造成的,或者我可以如何恢复主题,还是我只需要创建一个新主题,通知我的所有订阅者订阅它?

因为它看起来像一个 Rx 问题,我也在 their forum 上报告了它

更新:issue was confirmed 作为我正在使用的版本组合的 Rx/mono 问题。升级到最新的 Rx (1.0.10605) 解决了这个问题。

【问题讨论】:

    标签: c# mono system.reactive task-parallel-library


    【解决方案1】:

    您可能在 Rx 中遇到了竞争条件错误。

    this MSDN thread 中的通知,一位发帖者遇到了类似的问题:来自命中 AsyncLock.Wait 的堆栈跟踪的无法解释的 NullReferenceException。

    现在,他的问题是由 [ThreadStatic] 无法在 Windows Phone 7 上运行引起的。是否有可能 [ThreadStatic] 在 Mono 上具有细微的行为?

    我建议通过 Rx 论坛将此错误报告给 Rx 团队。

    【讨论】:

    • Hrm.. [ThreadStatic] 在单声道下具有细微差别感觉非常合理,因为它是一个黑盒实现。将锁定我的 OnNext 调用,看看是否会产生差异。谢谢。
    • 哦,好吧,如果是 [ThreadStatic] 竞争条件,它在发布者和订阅者之间。序列化 OnNext 调用没有给我带来任何好处。可能只需要手动实现 IObservable。
    • 无论如何,一定要向 Rx 团队报告。他们可能有解决方法,或完全不同的诊断。
    • 仅供参考,您可以使用 ObserveOn 将消息通过特定的锁或线程调度程序传递。
    • 在论坛上得到了答案:social.msdn.microsoft.com/Forums/en/rx/thread/… 这是单声道和我使用的 Rx 版本结合的问题。切换到最新的 Rx 修复了它
    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多