我有一个Subject<T>
,我正在通过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 反应式扩展 DLL 在单声道 2.10.1 下运行的(即我不认为是单声道代码正在消亡(。当我在 Windows 上尝试时,我还没有看到这种情况发生,但我没有在那里运行相同的负载。作为 OnNext 参数的项目绝对不为 null,因此这不是原因。
知道可能导致此问题的原因或我如何恢复主题,或者我只需要创建一个新主题,通知我的所有订阅者订阅它?
由于它看起来像一个 Rx 问题,我也在他们的论坛上报告了它
更新:该问题被确认为我正在使用的版本组合的 Rx/单声道问题。升级到最新的 Rx (1.0.10605( 解决了此问题。
您可能在 Rx 中遇到了竞争条件错误。
请注意,在此 MSDN 线程中,海报存在类似的问题:来自命中 AsyncLock.wait 的堆栈跟踪的无法解释的 NullReferenceException。
现在,他的问题是由[ThreadStatic]无法在Windows Phone 7上运行引起的。是否有可能[ThreadStatic]在Mono上有细微的行为?
我建议通过 Rx 论坛向 Rx 团队报告此错误。