これはあなたが後にしていることだとは思えません。サンプルコードは、常に役立つ清澄器です。トリックはソースではなく、あなたの事業者を置くことですが、サブスクリプションによって:
async void Main()
{
var hotObservable = new Subject<string>();
Func<string, bool> sub1_Condition = s => s != "Disconnect Sub1";
var subscription1 = hotObservable
.Timeout(TimeSpan.FromSeconds(5))
.TakeWhile(sub1_Condition)
.Subscribe(s => Console.WriteLine($"Sub 1: {s}"), _ => Console.WriteLine("Sub1 Timeout."),() => Console.WriteLine("Sub1 condition met or source ended."));
Func<string, bool> sub2_Condition = s => s != "Disconnect Sub2";
var subscription2 = hotObservable
.Timeout(TimeSpan.FromSeconds(2))
.TakeWhile(sub2_Condition)
.Subscribe(s => Console.WriteLine($"Sub 2: {s}"), _ => Console.WriteLine("Sub2 Timeout."),() => Console.WriteLine("Sub2 condition met or source ended."));
Func<string, bool> sub3_Condition = s => s != "Disconnect Sub3";
var subscription3 = hotObservable
.Timeout(TimeSpan.FromSeconds(7))
.TakeWhile(sub2_Condition)
.Subscribe(s => Console.WriteLine($"Sub 3: {s}"), _ => Console.WriteLine("Sub3 Timeout."),() => Console.WriteLine("Sub3 condition met or source ended."));
hotObservable.OnNext("Hello");
hotObservable.OnNext("Disconnect Sub1");
await Task.Delay(TimeSpan.FromSeconds(3));
hotObservable.OnNext("Just Sub 3 should be left");
hotObservable.OnCompleted();
}
これは次の出力を生成します。
Sub 1: Hello
Sub 2: Hello
Sub 3: Hello
Sub1 condition met or source ended.
Sub 2: Disconnect Sub1
Sub 3: Disconnect Sub1
Sub2 Timeout.
Sub 3: Just Sub 3 should be left
Sub3 condition met or source ended.
は、それが何を意味するの加入者がブロック/一時停止していますか?通知の受信を停止しますか? – supertopi
加入者は通知されます。通知(OnNextを介して)すると、眼球の状態が満たされた場合、加入者はObservableから削除/切断されます。 – brumScouse