我希望能够将Queue
用作Observable
,但我不知道如何创建它。我希望它能够在有人致电Enqueue
时推送数据。
class Producer:IObservable<int>
{
private object @lock = new object();
private Queue<int> queue = new Queue<int>();
List<IObserver<int>> observers = new List<IObserver<int>>();
public Producer()
{
}
public IObservable<int> ToObservable()
{
return ///
}
public bool Enqueue(int sample)
{
if (sample == null)
{
return false;
}
this.queue.Enqueue(sample);
return true;
}
public int Dequeue()
{
if(!this.queue.TryDequeue(out Sample rez))
{
return 0;
}
return rez;
}
public IDisposable Subscribe(IObserver<int> observer)
{
}
}
我可以用Subscriber
和IObserver
处理零件,我只是不知道如何将Producer
对象包装在IObservable
答案 0 :(得分:3)
通常,您不会自己支持Reactive Extensions来实现IObservable<T>
。可以将可观察对象视为经典事件的替代方法,如下所示:
class Producer
{
private Queue<int> _queue = new Queue<int>();
private Subject<int> _whenEnqueued = new Subject<int>();
public IObservable<int> WhenEnqueued => _whenEnqueued.AsObservable();
public void Enqueue(int value)
{
_queue.Enqueue(value);
_whenEnqueued.OnNext(value);
}
}
这样,外部类可以通过将工作委托给WhenEnqueued
类来订阅Subject
并获得新值的通知。
如果您真的想实现IObservable<T>
(通常不愿意),请查看IObservable documentation上的示例