Flow クラス

定義

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

[Android.Runtime.Register("java/util/concurrent/Flow", ApiSince=30, DoNotGenerateAcw=true)]
public sealed class Flow : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/Flow", ApiSince=30, DoNotGenerateAcw=true)>]
type Flow = class
    inherit Object
継承
Flow
属性

注釈

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

これらのインターフェイスは、 リアクティブ ストリーム の仕様に対応しています。 これらは、同時実行と分散の両方の非同期設定に適用されます。すべての (7 つの) メソッドは、"一方向" のメッセージ スタイルで void 定義されます。 通信は、"プッシュ" ベースのシステムで発生する可能性があるリソース管理の問題を回避するために使用できる単純な形式のフロー制御 (メソッド Subscription#request) に依存しています。

<b>例。</b> A は Publisher 通常、独自 Subscription の実装を定義します。メソッド subscribe で 1 つを構築し、呼び出し元 Subscriberに発行します。 通常は を使用して、サブスクライバーに非同期的にアイテムを Executor発行します。 たとえば、1 つのサブスクライバーに対して 1 つの TRUE 項目のみを発行する (要求された場合) 非常に単純な発行元を次に示します。 サブスクライバーは 1 つの項目のみを受け取るため、このクラスでは、ほとんどの実装で必要なバッファリングと順序付けコントロールは使用されません。

{@code
            class OneShotPublisher implements Publisher<Boolean> {
              private final ExecutorService executor = ForkJoinPool.commonPool(); // daemon-based
              private boolean subscribed; // true after first subscribe
              public synchronized void subscribe(Subscriber<? super Boolean> subscriber) {
                if (subscribed)
                  subscriber.onError(new IllegalStateException()); // only one allowed
                else {
                  subscribed = true;
                  subscriber.onSubscribe(new OneShotSubscription(subscriber, executor));
                }
              }
              static class OneShotSubscription implements Subscription {
                private final Subscriber<? super Boolean> subscriber;
                private final ExecutorService executor;
                private Future<?> future; // to allow cancellation
                private boolean completed;
                OneShotSubscription(Subscriber<? super Boolean> subscriber,
                                    ExecutorService executor) {
                  this.subscriber = subscriber;
                  this.executor = executor;
                }
                public synchronized void request(long n) {
                  if (!completed) {
                    completed = true;
                    if (n <= 0) {
                      IllegalArgumentException ex = new IllegalArgumentException();
                      executor.execute(() -> subscriber.onError(ex));
                    } else {
                      future = executor.submit(() -> {
                        subscriber.onNext(Boolean.TRUE);
                        subscriber.onComplete();
                      });
                    }
                  }
                }
                public synchronized void cancel() {
                  completed = true;
                  if (future != null) future.cancel(false);
                }
              }
            }}

Subscriber 、アイテムが要求および処理されるように配置します。 項目 (の Subscriber#onNext呼び出し) は、要求されない限り発行されませんが、複数の項目が要求される場合があります。 多くのサブスクライバー実装では、次の例のスタイルでこれを配置できます。バッファー サイズが 1 つの単一ステップで、サイズが大きいほど、通常、通信が少なく、より効率的な重複処理が可能になります。たとえば、値が 64 の場合、未処理の要求の総数は 32 から 64 の間に保持されます。 特定 Subscription のサブスクライバー メソッドの呼び出しは厳密に順序付けされているため、サブスクライバーが複数のサブスクリプションを保持しない限り、これらのメソッドでロックまたは揮発性を使用する必要はありません (その場合は、複数のサブスクライバーを定義し、それぞれが独自のサブスクリプションを持つ方がよい)。

{@code
            class SampleSubscriber<T> implements Subscriber<T> {
              final Consumer<? super T> consumer;
              Subscription subscription;
              final long bufferSize;
              long count;
              SampleSubscriber(long bufferSize, Consumer<? super T> consumer) {
                this.bufferSize = bufferSize;
                this.consumer = consumer;
              }
              public void onSubscribe(Subscription subscription) {
                long initialRequestSize = bufferSize;
                count = bufferSize - bufferSize / 2; // re-request when half consumed
                (this.subscription = subscription).request(initialRequestSize);
              }
              public void onNext(T item) {
                if (--count <= 0)
                  subscription.request(count = bufferSize - bufferSize / 2);
                consumer.accept(item);
              }
              public void onError(Throwable ex) { ex.printStackTrace(); }
              public void onComplete() {}
            }}

の既定値 #defaultBufferSize は、予想されるレート、リソース、および使用状況に基づいて、Flow コンポーネントで要求サイズと容量を選択するための出発点として役立つ場合があります。 または、フロー制御が不要な場合、サブスクライバーは最初に、次のように、実質的に無制限の数の項目を要求できます。

{@code
            class UnboundedSubscriber<T> implements Subscriber<T> {
              public void onSubscribe(Subscription subscription) {
                subscription.request(Long.MAX_VALUE); // effectively unbounded
              }
              public void onNext(T item) { use(item); }
              public void onError(Throwable ex) { ex.printStackTrace(); }
              public void onComplete() {}
              void use(T item) { ... }
            }}

9 に追加されました。

java.util.concurrent.FlowJava ドキュメント。

このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。

プロパティ

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
JniIdentityHashCode

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
JniPeerMembers

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

PeerReference

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
ThresholdClass

この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)
ThresholdType

この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)

メソッド

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
DefaultBufferSize()

パブリッシャーまたはサブスクライバーのバッファリングの既定値を返します。この値は、他の制約がない場合に使用できます。

Dispose()

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
Dispose(Boolean)

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常<は、通知</em> または>< em 中断</em によって待機します>。>

(継承元 Object)
Wait(Int64)

現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
IJavaPeerable.Finalized()

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

GetJniTypeName(IJavaPeerable)

によって管理Subscription Subscriptionされる 1 つ以上Subscriber Subscribersの によって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための相互に関連するインターフェイスと静的メソッド。

適用対象