【发布时间】:2012-02-06 12:51:00
【问题描述】:
我有一些使用 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 的做事方式。当我有多个线程调用 subject.OnNext(value); 时,确保一次只调用一次 OnNext 处理程序的最佳方法是什么?
【问题讨论】:
标签: c# system.reactive