Share via


SubmissionPublisher Classe

Definizione

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

[Android.Runtime.Register("java/util/concurrent/SubmissionPublisher", ApiSince=33, DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public class SubmissionPublisher : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IAutoCloseable, Java.Util.Concurrent.Flow.IPublisher
[<Android.Runtime.Register("java/util/concurrent/SubmissionPublisher", ApiSince=33, DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type SubmissionPublisher = class
    inherit Object
    interface IAutoCloseable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface Flow.IPublisher
Ereditarietà
SubmissionPublisher
Attributi
Implementazioni

Commenti

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso. Ogni sottoscrittore corrente riceve gli elementi appena inviati nello stesso ordine, a meno che non vengano rilevate eccezioni o eliminazioni. L'uso di un oggetto SubmissionPublisher consente ai generatori di elementi di fungere da server di pubblicazione reattivi conformi che si basano sulla gestione delle eliminazioni e/o sul blocco per il controllo del flusso.

Un oggetto SubmissionPublisher usa l'oggetto Executor fornito nel relativo costruttore per il recapito ai sottoscrittori. La scelta migliore dell'executor dipende dall'utilizzo previsto. Se i generatori di elementi inviati vengono eseguiti in thread separati e il numero di sottoscrittori può essere stimato, è consigliabile usare un oggetto Executors#newFixedThreadPool. In caso contrario, è consigliabile usare l'impostazione predefinita, in genere .ForkJoinPool#commonPool

Il buffering consente ai produttori e ai consumer di operare in modo temporaneo a velocità diverse. Ogni sottoscrittore usa un buffer indipendente. I buffer vengono creati al primo utilizzo ed espansi in base alle esigenze fino al massimo specificato. La capacità applicata può essere arrotondata alla potenza più vicina di due e/o vincolata dal valore più grande supportato da questa implementazione. Le chiamate di Flow.Subscription#request(long) request non comportano direttamente l'espansione del buffer, ma la saturazione del rischio se le richieste non soddisfatte superano la capacità massima. Il valore predefinito di può fornire un punto di Flow#defaultBufferSize() partenza utile per scegliere una capacità in base a tariffe, risorse e utilizzi previsti.

Un singolo SubmissionPublisher può essere condiviso tra più origini. Azioni in un thread di origine prima di pubblicare un elemento o emettere un segnale <>si verificano le azioni prima</i> successive all'accesso corrispondente da ogni sottoscrittore. Tuttavia, le stime segnalate di ritardo e domanda sono progettate per l'uso nel monitoraggio, non per il controllo della sincronizzazione e possono riflettere visualizzazioni non aggiornate o imprecise dello stato di avanzamento.

I metodi di pubblicazione supportano criteri diversi sulle operazioni da eseguire quando i buffer sono saturi. Il metodo #submit(Object) submit si blocca finché le risorse non sono disponibili. Questo è più semplice, ma meno reattivo. I offer metodi possono eliminare gli elementi (immediatamente o con timeout delimitato), ma offrono l'opportunità di interposire un gestore e quindi riprovare.

Se un metodo del Sottoscrittore genera un'eccezione, la relativa sottoscrizione viene annullata. Se un gestore viene fornito come argomento del costruttore, viene richiamato prima dell'annullamento in caso di eccezione nel metodo Flow.Subscriber#onNext onNext, ma le eccezioni nei metodi Flow.Subscriber#onSubscribe onSubscribeFlow.Subscriber#onError(Throwable) onError e Flow.Subscriber#onComplete() onComplete non vengono registrate o gestite prima dell'annullamento. Se l'executor fornito genera RejectedExecutionException (o qualsiasi altra eccezione RuntimeException o Error) quando si tenta di eseguire un'attività o un gestore di rilascio genera un'eccezione durante l'elaborazione di un elemento eliminato, l'eccezione viene nuovamente generata. In questi casi, non tutti i sottoscrittori saranno stati emessi l'elemento pubblicato. In questi casi è buona norma #closeExceptionally closeExceptionally .

Il metodo #consume(Consumer) semplifica il supporto per un caso comune in cui l'unica azione di un sottoscrittore consiste nel richiedere ed elaborare tutti gli elementi usando una funzione fornita.

Questa classe può anche fungere da base utile per le sottoclassi che generano elementi e usare i metodi in questa classe per pubblicarli. Ad esempio, ecco una classe che pubblica periodicamente gli elementi generati da un fornitore. In pratica è possibile aggiungere metodi per avviare e arrestare la generazione in modo indipendente, per condividere executor tra editori e così via o usare un SubmissionPublisher come componente anziché come superclasse.

{@code
            class PeriodicPublisher<T> extends SubmissionPublisher<T> {
              final ScheduledFuture<?> periodicTask;
              final ScheduledExecutorService scheduler;
              PeriodicPublisher(Executor executor, int maxBufferCapacity,
                                Supplier<? extends T> supplier,
                                long period, TimeUnit unit) {
                super(executor, maxBufferCapacity);
                scheduler = new ScheduledThreadPoolExecutor(1);
                periodicTask = scheduler.scheduleAtFixedRate(
                  () -> submit(supplier.get()), 0, period, unit);
              }
              public void close() {
                periodicTask.cancel(false);
                scheduler.shutdown();
                super.close();
              }
            }}

Di seguito è riportato un esempio di Flow.Processor implementazione. Usa richieste in un unico passaggio al relativo editore per semplicità di illustrazione. Una versione più adattiva può monitorare il flusso usando la stima del ritardo restituita da submit, insieme ad altri metodi di utilità.

{@code
            class TransformProcessor<S,T> extends SubmissionPublisher<T>
              implements Flow.Processor<S,T> {
              final Function<? super S, ? extends T> function;
              Flow.Subscription subscription;
              TransformProcessor(Executor executor, int maxBufferCapacity,
                                 Function<? super S, ? extends T> function) {
                super(executor, maxBufferCapacity);
                this.function = function;
              }
              public void onSubscribe(Flow.Subscription subscription) {
                (this.subscription = subscription).request(1);
              }
              public void onNext(S item) {
                subscription.request(1);
                submit(function.apply(item));
              }
              public void onError(Throwable ex) { closeExceptionally(ex); }
              public void onComplete() { close(); }
            }}

Aggiunto in 9.

Documentazione java per java.util.concurrent.SubmissionPublisher.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

SubmissionPublisher()

Crea un nuovo oggetto SubmissionPublisher usando per il ForkJoinPool#commonPool() recapito asincrono ai sottoscrittori (a meno che non supporti un livello di parallelismo di almeno due, nel qual caso viene creato un nuovo thread per eseguire ogni attività), con capacità massima del buffer di Flow#defaultBufferSizee nessun gestore per le eccezioni del Sottoscrittore nel metodo Flow.Subscriber#onNext(Object) onNext.

SubmissionPublisher(IExecutor, Int32)

Crea un nuovo oggetto SubmissionPublisher usando l'executor specificato per il recapito asincrono ai sottoscrittori, con le dimensioni massime del buffer specificate per ogni sottoscrittore e nessun gestore per le eccezioni del Sottoscrittore nel metodo Flow.Subscriber#onNext(Object) onNext.

SubmissionPublisher(IExecutor, Int32, IBiConsumer)

Crea un nuovo oggetto SubmissionPublisher usando l'executor specificato per il recapito asincrono ai sottoscrittori, con le dimensioni massime del buffer specificate per ogni sottoscrittore e, se non Null, il gestore specificato richiamato quando un Sottoscrittore genera un'eccezione nel metodo Flow.Subscriber#onNext(Object) onNext.

SubmissionPublisher(IntPtr, JniHandleOwnership)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
ClosedException

Restituisce l'eccezione associata a #closeExceptionally(Throwable) closeExceptionallyo null se non è chiusa o se chiusa normalmente.

Executor

Restituisce l'executor utilizzato per il recapito asincrono.

Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
HasSubscribers

Restituisce true se il server di pubblicazione dispone di sottoscrittori.

IsClosed

Restituisce true se l'editore non accetta invii.

JniIdentityHashCode

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
JniPeerMembers

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

MaxBufferCapacity

Restituisce la capacità massima del buffer per sottoscrittore.

NumberOfSubscribers

Restituisce il numero di sottoscrittori correnti.

PeerReference

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
Subscribers

Restituisce un elenco di sottoscrittori correnti per scopi di monitoraggio e rilevamento, non per richiamare Flow.Subscriber i metodi nei sottoscrittori.

ThresholdClass

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

ThresholdType

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

Metodi

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Close()

A meno che non sia già stato chiuso, genera Flow.Subscriber#onComplete() onComplete segnali ai sottoscrittori correnti e non consente i successivi tentativi di pubblicazione.

CloseExceptionally(Throwable)

A meno che non sia già stato chiuso, genera Flow.Subscriber#onError(Throwable) onError segnali ai sottoscrittori correnti con l'errore specificato e non consente i successivi tentativi di pubblicazione.

Consume(IConsumer)

Elabora tutti gli elementi pubblicati usando la funzione Consumer specificata.

Dispose()

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
Dispose(Boolean)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
Equals(Object)

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

(Ereditato da Object)
EstimateMaximumLag()

Restituisce una stima del numero massimo di elementi prodotti ma non ancora utilizzati tra tutti i sottoscrittori correnti.

EstimateMinimumDemand()

Restituisce una stima del numero minimo di elementi richiesti (tramite Flow.Subscription#request(long) request) ma non ancora prodotti, tra tutti i sottoscrittori correnti.

GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
IsSubscribed(Flow+ISubscriber)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

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 monitoraggio di questo oggetto.

(Ereditato da Object)
Offer(Object, IBiPredicate)

Pubblica l'elemento specificato, se possibile, in ogni sottoscrittore corrente richiamando in modo asincrono il relativo Flow.Subscriber#onNext(Object) onNext metodo.

Offer(Object, Int64, TimeUnit, IBiPredicate)

Pubblica l'elemento specificato, se possibile, in ogni sottoscrittore corrente richiamando in modo asincrono il relativo Flow.Subscriber#onNext(Object) onNext metodo, bloccando mentre le risorse per qualsiasi sottoscrizione non sono disponibili, fino al timeout specificato o fino a quando il thread del chiamante non viene interrotto, a quel punto viene richiamato il gestore specificato (se non Null) e, se restituisce true, ritentare una sola volta.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
Submit(Object)

Pubblica l'elemento specificato in ogni sottoscrittore corrente richiamando in modo asincrono il relativo Flow.Subscriber#onNext(Object) onNext metodo, bloccando in modo non intermedio mentre le risorse per qualsiasi sottoscrittore non sono disponibili.

Subscribe(Flow+ISubscriber)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

ToArray<T>()

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
Wait()

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

(Ereditato da Object)
Wait(Int64)

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

(Ereditato da Object)
Wait(Int64, Int32)

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

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
IJavaPeerable.Finalized()

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo verificato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

GetJniTypeName(IJavaPeerable)

Oggetto Flow.Publisher che rilascia in modo asincrono gli elementi inviati (non Null) ai sottoscrittori correnti fino a quando non viene chiuso.

Si applica a