Тема <T>прекращает публикацию элементов - PullRequest
3 голосов
/ 26 июня 2011

У меня есть 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, но мой подписчик больше ничего не получает.Это работает под моно 2.10.1 с использованием библиотек .NET 3.5 Reactive Extensions от MS (то есть я не думаю, что это моно код умирает).Я не видел, чтобы это случилось, когда я пробовал это на Windows, но я не запускал ту же нагрузку там.Элемент, который является аргументом для OnNext, определенно не равен нулю, так что это не причина.

Любая идея, что может быть причиной этого, или как я могу восстановить тему, или мне просто нужно создать новую тему, уведомить всех моих подписчиков, чтобы подписаться на это вместо этого?

Так как это похоже на проблему Rx, я также сообщил об этом на их форуме

Обновление: Проблема была подтверждена как проблема Rx / mono для комбинаций версий, которые я использовал.Обновление до последней версии Rx (1.0.10605) решило проблему.

1 Ответ

3 голосов
/ 26 июня 2011

Возможно, вы столкнулись с ошибкой в ​​состоянии гонки в Rx.

Обратите внимание, что в этом потоке MSDN у автора возникла похожая проблема: необъяснимое исключение NullReferenceException, исходящее из трассировки стека, которая попадает в AsyncLock.Wait.

Теперь его проблема была вызвана тем, что [ThreadStatic] не работает на Windows Phone 7. Возможно ли, что [ThreadStatic] имеет нюансированное поведение в Mono?

Я бы рекомендовал сообщать об этой ошибке команде Rx через форумы Rx.

...