Reactive Programming
Reactive Programming
Hot and cold observables
static void Main(string[] args)
{
var connectable = Observable.Create<int>(observer => {
int cnt = 0;
while(cnt < 100)
{
Thread.Sleep(1000);
Console.WriteLine("Produce Data : " + cnt);
observer.OnNext(cnt++);
}
observer.OnCompleted();
return Disposable.Create(() => { });
})
.SubscribeOn(new EventLoopScheduler())
.Publish();
connectable.Connect();
Thread.Sleep(2000);
connectable.Subscribe(v => { Console.WriteLine("a : " + v); });
connectable.Subscribe(v => { Console.WriteLine("b : " + v); });
connectable.Subscribe(v => { Console.WriteLine("c : " + v); });
Console.ReadLine();
}
위의 Observable.Cretae<T>
는 기본적으로 Subscribe()
를 할 때 인자로 받는 delegate 가 호출이 된다. 여러 Subscriber 가 있다면 위의 예시에서 기본적으로 다음과 같은 결과가 된다.
Produce Data 0
a : 0
Produce Data 1
a : 1
...
Produce Data 0
b : 0
...
Produce Data 0
c : 0
...
하지만 만약 Publish()
를 하게 된다면 다음과 같게 된다.
Produce Data 2
a : 3
b : 3
c : 3
Produce Data 3
a : 4
b : 4
c : 4
...
후자의 경우가 Hot Observable 이다.
참고자료
andrestaltz, The introduction to Reactive Programming you’ve been missing
댓글남기기