Linguaggio

Flow Classe

Definizione

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

[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
Ereditarietà
Attributi

Commenti

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

Queste interfacce corrispondono alla specifica di flussi reattivi . Si applicano in impostazioni asincrone simultanee e distribuite: tutti i metodi (sette) sono definiti in void stile messaggio "unidirezionale". La comunicazione si basa su una forma semplice di controllo del flusso (metodo Subscription#request) che può essere usata per evitare problemi di gestione delle risorse che altrimenti si verificano nei sistemi basati su "push".

<b>Esempi.</b> A Publisher definisce in genere la propria Subscription implementazione, creandone una nel metodo subscribe ed eseguendola alla chiamata Subscriberdi . Pubblica gli elementi nel sottoscrittore in modo asincrono, in genere usando un oggetto Executor. Ad esempio, di seguito è riportato un server di pubblicazione molto semplice che genera un solo TRUE elemento (quando richiesto) a un singolo sottoscrittore. Poiché il sottoscrittore riceve solo un singolo elemento, questa classe non usa il buffering e il controllo di ordinamento necessari nella maggior parte delle implementazioni.

{@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);
                }
              }
            }}

Dispone Subscriber gli elementi da richiedere ed elaborare. Gli elementi (chiamate di Subscriber#onNext) non vengono emessi a meno che non venga richiesto, ma è possibile richiedere più elementi. Molte implementazioni del Sottoscrittore possono disporre questo aspetto nello stile dell'esempio seguente, in cui una dimensione del buffer di 1 singolo passaggio e dimensioni maggiori in genere consentono un'elaborazione più efficiente sovrapposta con una minore comunicazione; ad esempio con un valore pari a 64, questo mantiene il totale delle richieste in sospeso tra 32 e 64. Poiché le chiamate al metodo del Sottoscrittore per un determinato Subscription oggetto sono rigorosamente ordinate, non è necessario che questi metodi usino blocchi o volatili, a meno che un Sottoscrittore non gestisca più sottoscrizioni( in questo caso è preferibile definire invece più Sottoscrittori, ognuno con la propria sottoscrizione).

{@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() {}
            }}

Il valore predefinito di #defaultBufferSize può fornire un punto di partenza utile per la scelta delle dimensioni e delle capacità delle richieste nei componenti di Flow in base a frequenze, risorse e utilizzi previsti. In alternativa, quando il controllo del flusso non è mai necessario, un sottoscrittore potrebbe inizialmente richiedere un numero di elementi effettivamente non associato, come in:

{@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) { ... }
            }}

Aggiunta in 9.

per java.util.concurrent.Flow.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.

Proprietà

Nome Descrizione
Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
JniManagedPeerState

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
JniPeerMembers

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

PeerReference

Ottiene il riferimento all'oggetto JNI per questo peer Java.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)

Metodi

Nome Descrizione
Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
DefaultBufferSize()

Restituisce un valore predefinito per Publisher o buffering del Sottoscrittore, che può essere utilizzato in assenza di altri vincoli.

Dispose()

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
Dispose(Boolean)

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
DisposeUnlessReferenced()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
Equals(Object)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore di codice hash per l'oggetto .

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
ToArray<T>()

Crea una matrice gestita da questo wrapper di matrice Java.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione di stringa dell'oggetto .

(Ereditato da Object)
UnregisterFromRuntime()

Annulla la registrazione di questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IJavaPeerable.Disposed()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
IJavaPeerable.Finalized()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

(Ereditato da JavaObject)

Metodi di estensione

Nome Descrizione
GetJniTypeName(IJavaPeerable)

Ottiene il nome JNI del tipo dell'istanza selfdi .

JavaAs<TResult>(IJavaPeerable)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un oggetto Subscription Subscription.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

Si applica a