0
수신 (반응성 확장)에는 가입자 ..."기본"가입 이미이 질문을 읽어
"Exclusive" and "Default" Subscription Modes in Rx
내 경우는 매우 유사없는 경우.
나는 그런 일을 만들려면 ...
class Example {
private stativ readonly Subject<Unit> EventStreamSubject =
new Subject<Unit>();
public static IObservable<Unit> EventStream {
get {
// TODO
}
}
public static void SetDefault(IObserver<Unit> defaultSubscriber) {
_defaultSubscriber = defaultSubscriber;
// TODO
}
private static IObserver<Unit> _defaultSubscriber;
}
규칙 ...
- 하나 또는 더 DefaultSubscriber이있을 수있는 가입자가에 존재하지 않는 경우
- DefaultSubscriber가 사용 된 EventStream
- 구독자 수가 EventStream을 구독하는 경우 DefaultSubscriber는 구독이있을 때까지 요소를 수신해서는 안됩니다. 배치
- EventStream이 이미 다른 가입자가 가입 (및 배치 마지막으로 가입 할 때까지 사용되지 않음) 된 후 DefaultSubscriber가 설정할 수와 DefaultSubscriber 경우 그 반대의 경우도 마찬가지
는 합계에서 ... EventStream 항상 구독 사용할 수 있습니다. DefaultSubscriber 또는 다른 외부 가입자 (DefaultSubscriber가없는 경우).
구독의 변경 사항을 관찰하기 위해 Rx에서 어떤 방법을 사용할 수 있습니까? 구독을 관찰하거나 구독 종료를 관찰 할 수 있습니까?
다른 질문과의 차이점은 ... 요소에는 어떤 가입자를 사용해야하는지에 대한 정보가 없습니다.
도움 주셔서 감사합니다.
여기에 내가 원하는 내 코드를 실행하려면... 해결책을 찾을 수
static void Main(string[] args)
{
var defaultSubscriber = Observer.Create(x => Console.WriteLine("DefaultSubscriber is used"));
Example.SetDefault(defaultSubscriber);
Example.EventStreamSubject.OnNext(Unit.Default);
using (Example.EventStream.Subscribe(x => Console.WriteLine("Subscriber 1 is used")))
{
Example.EventStreamSubject.OnNext(Unit.Default);
using (Example.EventStream.Subscribe(x => Console.WriteLine("Subscriber 1.1 is used")))
{
Example.EventStreamSubject.OnNext(Unit.Default);
}
Example.EventStreamSubject.OnNext(Unit.Default);
}
Example.EventStreamSubject.OnNext(Unit.Default);
using (Example.EventStream.Subscribe(x => Console.WriteLine("Subscriber 2 is used")))
{
using (Example.EventStream.Subscribe(x => Console.WriteLine("Subscriber 2.1 is used")))
{
Example.EventStreamSubject.OnNext(Unit.Default);
}
}
Example.EventStreamSubject.OnNext(Unit.Default);
// expected output:
// DefaultSubscriber is used
// Subscriber 1 is used
// Subscriber 1 is used
// Subscriber 1.1 is used
// Subscriber 1 is used
// DefaultSubscriber is used
// Subscriber 2 is used
// Subscriber 2.1 is used
// DefaultSubscriber is used
}
}