Langue

SubmissionPublisher Classe

Définition

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

[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.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
Héritage
SubmissionPublisher
Attributs
Implémente

Remarques

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé. Chaque abonné actuel reçoit les éléments qui viennent d’être soumis dans le même ordre, sauf si des suppressions ou des exceptions sont rencontrées. L’utilisation d’un SubmissionPublisher permet aux générateurs d’éléments d’agir en tant que serveurs de publication réactifs conformes qui s’appuient sur la gestion des suppressions et/ou le blocage pour le contrôle de flux.

Un SubmissionPublisher utilise le Executor constructeur fourni pour la remise aux abonnés. Le meilleur choix d’Exécuteur dépend de l’utilisation attendue. Si le ou les générateurs d’éléments envoyés s’exécutent dans des threads distincts et que le nombre d’abonnés peut être estimé, envisagez d’utiliser un Executors#newFixedThreadPool. Sinon, envisagez d’utiliser la valeur par défaut, normalement le ForkJoinPool#commonPool.

La mise en mémoire tampon permet aux producteurs et aux consommateurs de fonctionner temporairement à des taux différents. Chaque abonné utilise une mémoire tampon indépendante. Les mémoires tampons sont créées lors de la première utilisation et développées selon les besoins jusqu’au maximum donné. (La capacité appliquée peut être arrondie à la puissance la plus proche de deux et/ou limitées par la plus grande valeur prise en charge par cette implémentation.) Les appels de n’entraînent pas directement l’expansion de Flow.Subscription#request(long) request la mémoire tampon, mais la saturation des risques si les demandes non remplies dépassent la capacité maximale. La valeur par défaut de peut fournir un point de Flow#defaultBufferSize() départ utile pour choisir une capacité en fonction des taux, ressources et utilisations attendus.

Un seul SubmissionPublisher peut être partagé entre plusieurs sources. Actions dans un thread source avant de publier un élément ou d’émettre un signal <i>happen-before</i> actions suite à l’accès correspondant par chaque abonné. Toutefois, les estimations signalées du décalage et de la demande sont conçues pour être utilisées dans la surveillance, et non pour le contrôle de synchronisation et peuvent refléter des vues obsolètes ou inexactes de la progression.

Les méthodes de publication prennent en charge différentes stratégies sur la procédure à suivre lorsque les mémoires tampons sont saturées. Blocs de méthode #submit(Object) submit jusqu’à ce que les ressources soient disponibles. C’est le plus simple, mais le moins réactif. Les offer méthodes peuvent supprimer des éléments (immédiatement ou avec un délai d’expiration limité), mais fournir une occasion d’interposer un gestionnaire, puis réessayer.

Si une méthode Abonné lève une exception, son abonnement est annulé. Si un gestionnaire est fourni en tant qu’argument de constructeur, il est appelé avant l’annulation lors d’une exception dans la méthode Flow.Subscriber#onNext onNext, mais les exceptions dans les méthodes Flow.Subscriber#onSubscribe onSubscribeet Flow.Subscriber#onError(Throwable) onErrorFlow.Subscriber#onComplete() onComplete ne sont pas enregistrées ou gérées avant l’annulation. Si l’exécuteur fourni lève RejectedExecutionException (ou tout autre runtimeException ou erreur) lors d’une tentative d’exécution d’une tâche, ou qu’un gestionnaire de suppression lève une exception lors du traitement d’un élément supprimé, l’exception est réexpliquée. Dans ce cas, tous les abonnés n’auront pas reçu l’élément publié. Il est généralement recommandé de #closeExceptionally closeExceptionally le faire dans ces cas.

La méthode #consume(Consumer) simplifie la prise en charge d’un cas courant dans lequel la seule action d’un abonné consiste à demander et à traiter tous les éléments à l’aide d’une fonction fournie.

Cette classe peut également servir de base pratique pour les sous-classes qui génèrent des éléments et utiliser les méthodes de cette classe pour les publier. Par exemple, voici une classe qui publie régulièrement les éléments générés à partir d’un fournisseur. (Dans la pratique, vous pouvez ajouter des méthodes pour démarrer et arrêter la génération indépendamment, pour partager des exécuteurs entre les éditeurs, et ainsi de suite, ou utiliser un SubmissionPublisher en tant que composant plutôt qu’une 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();
              }
            }}

Voici un exemple d’implémentation Flow.Processor . Il utilise des requêtes en une seule étape à son éditeur pour simplifier l’illustration. Une version plus adaptative peut surveiller le flux à l’aide de l’estimation du décalage retournée par submit, ainsi que d’autres méthodes utilitaires.

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

Ajouté dans 9.

Java documentation pour java.util.concurrent.SubmissionPublisher.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
SubmissionPublisher()

Crée un objet SubmissionPublisher à l’aide de la ForkJoinPool#commonPool() remise asynchrone aux abonnés (sauf s’il ne prend pas en charge un niveau de parallélisme d’au moins deux, auquel cas, un nouveau thread est créé pour exécuter chaque tâche), avec une capacité de mémoire tampon maximale et Flow#defaultBufferSizeaucun gestionnaire pour les exceptions d’Abonné dans la méthode Flow.Subscriber#onNext(Object) onNext.

SubmissionPublisher(IExecutor, Int32, IBiConsumer)

Crée un objet SubmissionPublisher à l’aide de l’exécuteur donné pour la remise asynchrone aux abonnés, avec la taille de mémoire tampon maximale donnée pour chaque abonné et, s’il n’est pas null, le gestionnaire donné appelé lorsqu’un Abonné lève une exception dans la méthode Flow.Subscriber#onNext(Object) onNext.

SubmissionPublisher(IExecutor, Int32)

Crée un submissionPublisher à l’aide de l’exécuteur donné pour la remise asynchrone aux abonnés, avec la taille maximale de mémoire tampon donnée pour chaque abonné et aucun gestionnaire pour les exceptions de l’Abonné dans la méthode Flow.Subscriber#onNext(Object) onNext.

SubmissionPublisher(IntPtr, JniHandleOwnership)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

Propriétés

Nom Description
Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
ClosedException

Retourne l’exception associée #closeExceptionally(Throwable) closeExceptionallyà , ou null si elle n’est pas fermée ou si elle est fermée normalement.

Executor

Retourne l’exécuteur utilisé pour la remise asynchrone.

Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
HasSubscribers

Retourne true si cet éditeur a des abonnés.

IsClosed

Retourne true si cet éditeur n’accepte pas les soumissions.

JniIdentityHashCode

Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité.

(Hérité de Object)
JniManagedPeerState

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
JniPeerMembers

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

MaxBufferCapacity

Retourne la capacité maximale de mémoire tampon par abonné.

NumberOfSubscribers

Retourne le nombre d’abonnés actuels.

PeerReference

Obtient la référence d’objet JNI pour cet homologue Java.

(Hérité de Object)
Subscribers

Retourne une liste des abonnés actuels à des fins de surveillance et de suivi, et non pour appeler Flow.Subscriber des méthodes sur les abonnés.

ThresholdClass

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

ThresholdType

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

Méthodes

Nom Description
Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
Close()

Sauf si déjà fermé, émet des Flow.Subscriber#onComplete() onComplete signaux aux abonnés actuels et interdit les tentatives suivantes de publication.

CloseExceptionally(Throwable)

Sauf si déjà fermé, émet des Flow.Subscriber#onError(Throwable) onError signaux aux abonnés actuels avec l’erreur donnée et interdit les tentatives suivantes de publication.

Construct(JniObjectReference, JniObjectReferenceOptions)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
Consume(IConsumer)

Traite tous les éléments publiés à l’aide de la fonction Consommateur donnée.

Dispose()

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
Dispose(Boolean)

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
DisposeUnlessReferenced()

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
Equals(Object)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
EstimateMaximumLag()

Retourne une estimation du nombre maximal d’éléments produits, mais pas encore consommés parmi tous les abonnés actuels.

EstimateMinimumDemand()

Retourne une estimation du nombre minimal d’éléments demandés (via Flow.Subscription#request(long) request) mais pas encore produits, parmi tous les abonnés actuels.

GetHashCode()

Retourne une valeur de code de hachage pour l’objet.

(Hérité de Object)
IsSubscribed(Flow+ISubscriber)

Retourne true si l’Abonné donné est actuellement abonné.

JavaFinalize()
Obsolète.

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
Offer(Object, IBiPredicate)

Publie l’élément donné, le cas échéant, sur chaque abonné actuel en appelant de manière asynchrone sa Flow.Subscriber#onNext(Object) onNext méthode.

Offer(Object, Int64, TimeUnit, IBiPredicate)

Publie l’élément donné, si possible, sur chaque abonné actuel en appelant de manière asynchrone sa Flow.Subscriber#onNext(Object) onNext méthode, en bloquant pendant que les ressources d’un abonnement ne sont pas disponibles, jusqu’au délai d’attente spécifié ou jusqu’à ce que le thread d’appelant soit interrompu, à quel point le gestionnaire donné (si non null) est appelé, et s’il retourne la valeur true, retenté une fois.

SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
Submit(Object)

Publie l’élément donné sur chaque abonné actuel en appelant de façon asynchrone sa Flow.Subscriber#onNext(Object) onNext méthode, ce qui bloque l’ininterruptiblement pendant que les ressources pour n’importe quel abonné ne sont pas disponibles.

Subscribe(Flow+ISubscriber)

Ajoute l’Abonné donné, sauf s’il est déjà abonné.

ToArray<T>()

Crée un tableau managé à partir de ce wrapper de tableau Java.

(Hérité de Object)
ToString()

Retourne une représentation sous forme de chaîne de l’objet.

(Hérité de Object)
UnregisterFromRuntime()

Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
IJavaPeerable.Finalized()

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

(Hérité de JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

Méthodes d’extension

Nom Description
GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

Qui Flow.Publisher émet de façon asynchrone des éléments soumis (non null) aux abonnés actuels jusqu’à ce qu’il soit fermé.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à