Flow Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Interfaces interrelacionadas 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
- Atributos
Comentários
Interfaces interrelacionadas 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 . Elas se aplicam em configurações assíncronas simultâneas e distribuídas: todos (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, podem ocorrer em sistemas baseados em "push".
<b>Exemplos.</b> A Publisher geralmente define sua própria Subscription implementação; construir uma no método subscribe e emiti-la para a chamada Subscriber. Ele publica itens no assinante de forma assíncrona, normalmente usando um Executor. 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 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);
}
}
}}
Um Subscriber organiza que os itens sejam solicitados e processados. Itens (invocações de Subscriber#onNext) não são emitidos, a menos que solicitados, mas vários itens podem ser solicitados. Muitas implementações do Assinante podem organizar isso no estilo do exemplo a seguir, em que um tamanho de buffer de 1 etapas simples 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 invocações de método do Assinante para um determinado 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 pode fornecer um ponto de #defaultBufferSize partida útil para escolher tamanhos e capacidades de solicitação em componentes do Flow com base nas taxas, recursos e usos esperados. Ou, quando o controle de fluxo nunca é necessário, um assinante pode inicialmente solicitar um número efetivamente não associado 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.
Java documentação para java.util.concurrent.Flow.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.
Propriedades
| Nome | Description |
|---|---|
| Class |
Retorna a classe de runtime deste |
| Handle |
O identificador para a instância subjacente do Android. (Herdado de Object) |
| JniIdentityHashCode |
Obtém o código de hash de identidade atribuído a esse par Java pelo runtime de interoperabilidade. (Herdado de Object) |
| JniManagedPeerState |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| JniPeerMembers |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| PeerReference |
Obtém a referência de objeto JNI para este par Java. (Herdado de Object) |
| ThresholdClass |
Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código. (Herdado de Object) |
| ThresholdType |
Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código. (Herdado de Object) |
Métodos
| Nome | Description |
|---|---|
| Clone() |
Cria e retorna uma cópia desse objeto. (Herdado de Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| DefaultBufferSize() |
Retorna um valor padrão para Publisher ou buffer do Assinante, que pode ser usado na ausência de outras restrições. |
| Dispose() |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| Dispose(Boolean) |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| DisposeUnlessReferenced() |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| Equals(Object) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| 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) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| ToArray<T>() |
Cria uma matriz gerenciada com base nesse wrapper de matriz Java. (Herdado de Object) |
| ToString() |
Retorna uma representação de cadeia de caracteres do objeto. (Herdado de Object) |
| UnregisterFromRuntime() |
Cancela o registro desse par Java do runtime de interoperabilidade. (Herdado de Object) |
| Wait() |
Faz com que o thread atual aguarde até que seja despertado, normalmente sendo <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 por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
| Wait(Int64) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| IJavaPeerable.Disposed() |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| IJavaPeerable.Finalized() |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| IJavaPeerable.JniObjectReferenceControlBlock |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
Métodos de Extensão
| Nome | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtém o nome JNI do tipo da instância |
| JavaAs<TResult>(IJavaPeerable) |
Tente coagir a digitar |
| JavaCast<TResult>(IJavaObject) |
Executa uma conversão de tipo marcada por runtime do Android. |
| JavaCast<TResult>(IJavaObject) |
Interfaces interrelacionadas e métodos estáticos para estabelecer componentes controlados por fluxo nos quais |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Tente coagir a digitar |