6

Reactor Project を理解しようとしていますが、サブスクリプションをキャンセルする方法を探しています。たとえば Flux のサブスクリプションを作成した後、onCancel シグナルの送信に使用できる Cancellation オブジェクトへの参照を取得できることはわかっていますが、これはサブスクリプションを作成した後でのみであり、その参照をある種のコレクションに保持する必要があります。

Cancellation オブジェクトを取得するより良い方法はありますか? または、サブスクリプションをキャンセルするだけです。たぶん、すべてのアクティブなサブスクリプションへの参照を含むある種の場所-ええ、それは素晴らしいでしょう...

4

1 に答える 1

7

SubscriptionReactor では、呼び出す前にa をキャンセルしたいという意味はありません(データの放出を開始するようにチェーンに信号を送って伝達するsubscribe()のはまさにそのメソッドであるため)。Subscription

すべてのサブスクリプションを一元管理する場所はありません。キャンセルしたい特定のサブスクリプションを見つける方法が必要になるため、あまり意味がありません (また、チェーン内の各オペレーターが中間のサブスクリプションも使用できることに注意してください)。 ...)。

一部のオペレーターは、あなたに代わってサブスクリプションをキャンセルすることにも注意してください! たとえばtake(int)、十分なアイテムが発行されると、上流でキャンセルされます。

Flux.just(1, 2, 3, 4).log().take(2).subscribe(System.out::println);

出力します:

14:17:48.729 [main] INFO  reactor.Flux.Array.1 - | onSubscribe([Synchronous Fuseable] FluxArray.ArraySubscription)
14:17:48.732 [main] INFO  reactor.Flux.Array.1 - | request(unbounded)
14:17:48.732 [main] INFO  reactor.Flux.Array.1 - | onNext(1)
1
14:17:48.732 [main] INFO  reactor.Flux.Array.1 - | onNext(2)
2
14:17:48.732 [main] INFO  reactor.Flux.Array.1 - | cancel()
于 2017-01-05T13:18:42.707 に答える