Flow Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 Subscription
Subscription
oggetto .
[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 Subscription Subscription
oggetto .
Queste interfacce corrispondono alla specifica dei flussi reattivi . Si applicano sia nelle impostazioni asincrone simultanee che distribuite: tutti i metodi (sette) vengono definiti in void
stile messaggio "unidirezionale". La comunicazione si basa su una semplice forma di controllo del flusso (metodo Subscription#request
) che può essere usata per evitare problemi di gestione delle risorse che potrebbero verificarsi in caso contrario nei sistemi basati su "push".
<b>Esempi.</b> A Publisher
definisce in genere la propria Subscription
implementazione; la costruzione di uno nel metodo subscribe
e l'emissione al chiamante Subscriber
. Pubblica gli elementi nel sottoscrittore in modo asincrono, in genere usando un Executor
oggetto . Ad esempio, ecco un server di pubblicazione molto semplice che genera solo problemi (quando richiesto) un singolo elemento a un singolo TRUE
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);
}
}
}}
Un Subscriber
oggetto dispone che gli elementi vengano richiesti ed elaborati. Gli elementi (chiamate di Subscriber#onNext
) non vengono rilasciati a meno che non siano richiesti, ma è possibile richiedere più elementi. Molte implementazioni del Sottoscrittore possono disporre questo nello stile dell'esempio seguente, in cui una dimensione del buffer di 1 passaggi singoli e dimensioni maggiori in genere consente un'elaborazione più efficiente sovrapposta con meno 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 Sottoscrittore per un determinato Subscription
oggetto sono rigorosamente ordinate, non è necessario che questi metodi usino blocchi o volatili a meno che un Sottoscrittore non mantiene più sottoscrizioni(in questo caso è preferibile definire 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 scegliere le dimensioni delle richieste e le capacità nei componenti flow in base alle tariffe, alle risorse e agli usi previsti. In alternativa, quando il controllo del flusso non è mai necessario, un sottoscrittore potrebbe richiedere inizialmente un numero di elementi in uscita in modo efficace, 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) { ... }
}}
Aggiunto in 9.
Documentazione Java per java.util.concurrent.Flow
.
Le parti di questa pagina sono modifiche in base al lavoro creato e condiviso dal Android Open Source e usato in base ai termini descritti nella .
Proprietà
Class |
Restituisce la classe di runtime di questo |
Handle |
Handle all'istanza di Android sottostante. (Ereditato da Object) |
JniIdentityHashCode |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
JniPeerMembers |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
PeerReference |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
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
Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
DefaultBufferSize() |
Restituisce un valore predefinito per il buffer del server di pubblicazione o del Sottoscrittore, che può essere usato in assenza di altri vincoli. |
Dispose() |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
Dispose(Boolean) |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
GetHashCode() |
Restituisce un valore del codice hash per l'oggetto. (Ereditato da Object) |
JavaFinalize() |
Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto. (Ereditato da Object) |
Notify() |
Riattiva un singolo thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
NotifyAll() |
Riattiva tutti i thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
ToArray<T>() |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
ToString() |
Restituisce una rappresentazione in formato stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
Wait() |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.< (Ereditato da Object) |
Wait(Int64) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale. (Ereditato da Object) |
Wait(Int64, Int32) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo 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
IJavaPeerable.Disposed() |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
IJavaPeerable.DisposeUnlessReferenced() |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
IJavaPeerable.Finalized() |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
IJavaPeerable.JniManagedPeerState |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione dei tipi controllati dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |
GetJniTypeName(IJavaPeerable) |
Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui |