Compartilhar via


Flow Classe

Definição

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um 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
Herança
Flow
Atributos

Comentários

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

Essas interfaces correspondem à especificação de fluxos reativos. Eles se aplicam em configurações assíncronas simultâneas e distribuídas: Todos os (sete) métodos são definidos no void estilo de mensagem "unidirecional". A comunicação depende de uma forma simples de controle de fluxo (método Subscription#request) que pode ser usada para evitar problemas de gerenciamento de recursos que, de outra forma, poderiam ocorrer em sistemas baseados em "push".

<b>Exemplos.</b> A Publisher geralmente define sua própria Subscription implementação, construindo uma no método subscribe e emitindo para a chamada Subscriber. Ele publica itens para o assinante de forma assíncrona, normalmente usando um Executorarquivo . Por exemplo, aqui está um editor muito simples que só emite (quando solicitado) um único TRUE item para um único assinante. Como o assinante recebe apenas um único item, essa classe não usa o controle de buffer e ordenação necessário na maioria das implementações.

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

A Subscriber organiza que os itens sejam solicitados e processados. Os itens (invocações de ) não são emitidos a Subscriber#onNextmenos que solicitados, mas vários itens podem ser solicitados. Muitas implementações do Assinante podem organizar isso no estilo do exemplo a seguir, onde um tamanho de buffer de 1 etapa única e tamanhos maiores geralmente permitem um processamento sobreposto mais eficiente com menos comunicação; por exemplo, com um valor de 64, isso mantém o total de solicitações pendentes entre 32 e 64. Como as chamadas do método do Assinante para um determinado Subscription são estritamente ordenadas, não há necessidade desses métodos usarem bloqueios ou voláteis, a menos que um Assinante mantenha várias Assinaturas (nesse caso, é melhor definir vários Assinantes, cada um com sua própria Assinatura).

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

O valor padrão de pode fornecer um ponto de partida útil para escolher tamanhos e capacidades de solicitação em componentes de #defaultBufferSize fluxo com base em taxas, recursos e usos esperados. Ou, quando o controle de fluxo nunca é necessário, um assinante pode solicitar inicialmente um número efetivamente ilimitado de itens, como em:

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

Adicionado em 9.

Documentação Java para java.util.concurrent.Flow.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Propriedades

Class

Retorna a classe de tempo de execução deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
JniIdentityHashCode

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
JniPeerMembers

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

PeerReference

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
ThresholdClass

Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
ThresholdType

Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)

Métodos

Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
DefaultBufferSize()

Retorna um valor padrão para buffer de Publicador ou Assinante, que pode ser usado na ausência de outras restrições.

Dispose()

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
Dispose(Boolean)

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
Equals(Object)

Indica se algum outro objeto é "igual" a este.

(Herdado de Object)
GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle.

(Herdado de Object)
ToArray<T>()

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
Wait()

Faz com que o thread atual aguarde até que ele seja ativado, normalmente sendo <em notificado</em> ou <em>interrompido</em>>.

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido.

(Herdado de Object)

Implantações explícitas de interface

IJavaPeerable.Disposed()

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
IJavaPeerable.Finalized()

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
IJavaPeerable.JniManagedPeerState

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

(Herdado de Object)

Métodos de Extensão

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo verificada em tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

GetJniTypeName(IJavaPeerable)

Interfaces inter-relacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais Publisher Publishers produzem itens consumidos por um ou mais Subscriber Subscribers, cada um gerenciado por um Subscription Subscription.

Aplica-se a