У меня есть код с использованием Rx, вызываемый из нескольких потоков, который делает:
subject.OnNext(value); // where subject is Subject<T>
Я хочу, чтобы значения обрабатывались в фоновом режиме, поэтому моя подписка
subscription = subject.ObserveOn(Scheduler.TaskPool).Subscribe(value =>
{
// use value
});
Мне все равно, какие потоки обрабатывают значения, выходящие из Observable, до тех пор, пока работа помещается в TaskPool и не блокирует текущий поток. Однако мое использование "значения" внутри моего делегата OnNext не является потокобезопасным. На данный момент, если через Observable проходит множество значений, я получаю перекрывающиеся вызовы для своего обработчика OnNext.
Я мог бы просто добавить блокировку в свой делегат OnNext, но это не похоже на Rx-способ делать что-то. Какой лучший способ убедиться, что у меня есть только один вызов для моего обработчика OnNext за один раз, когда у меня есть несколько потоков, вызывающих subject.OnNext(value);
?