我是新约的反应,但想法把我的好奇心,所以我做了一些有点反应变量,但我不知道这是否是最好的初步实践,然后我就会把这个线程。使属性线程安全c#信号量或锁?
这里的类:
公共类RxVar:的IObservable {
T _value; public T Value { get{ return _value; } set{ if (!_value.Equals(value)) { onChange(_value); _value = value; } } } event onValChange onChange = delegate { }; delegate void onValChange(T val); IObservable<T> _observable; public RxVar() { _observable = Observable.FromEvent<onValChange,T>(ev => onChange += ev, ev => onChange -= ev); } public IDisposable Subscribe(IObserver<T> observer) { return _observable.Subscribe(p=>observer.OnNext(p)); } }
信号灯例如
_semaphoreSlim.WaitOne(); if (!_value.Equals(value)) { onChange(_value); _value = value; } _semaphoreSlim.release();
好吧我想让这个线程安全,并且我对死锁感到恐慌,所以 使用lock或semaphone会更好,还是因为不需要反应性本身?
谢谢。 :)
真的谢谢你,反正我不明白为什么semaphone不能做的工作:) – LXG
信号量是最适合于其他场景,如[生产者/消费者(http://en.wikipedia.org/wiki/监制%E2 %80%93consumer_problem)或[读者/作者](http://en.wikipedia.org/wiki/Readers-writers_problem)。这种情况是一个简单的[互斥](http://en.wikipedia.org/wiki/Mutex),因此可能有更清晰的代码和更有效的实现。 – pid