Flow Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers
se producen elementos consumidos por uno o varios Subscriber
Subscribers
, cada uno administrado por .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
- Herencia
- Atributos
Comentarios
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers
se producen elementos consumidos por uno o varios Subscriber Subscribers
, cada uno administrado por .Subscription Subscription
Estas interfaces corresponden a la especificación de flujos reactivos. Se aplican tanto en la configuración asincrónica simultánea como distribuida: todos los métodos (siete) se definen en void
el estilo de mensaje "unidireccional". La comunicación se basa en una forma sencilla de control de flujo (método Subscription#request
) que se puede usar para evitar problemas de administración de recursos que pueden producirse en sistemas basados en "inserción".
<b>Ejemplos.</b> Normalmente Publisher
define su propia Subscription
implementación; construye una en el método subscribe
y la emite a la llamada Subscriber
a . Publica elementos en el suscriptor de forma asincrónica, normalmente mediante .Executor
Por ejemplo, este es un publicador muy sencillo que solo emite (cuando se solicita) un solo elemento a un solo TRUE
suscriptor. Dado que el suscriptor recibe solo un solo elemento, esta clase no usa el almacenamiento en búfer ni el control de ordenación necesarios en la mayoría de las implementaciones.
{@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
organiza que se solicitan y procesan los elementos. Los elementos (invocaciones de Subscriber#onNext
) no se emiten a menos que se soliciten, pero se pueden solicitar varios elementos. Muchas implementaciones de suscriptor pueden organizar esto en el estilo del ejemplo siguiente, donde un tamaño de búfer de 1 solo pasos y tamaños más grandes normalmente permiten un procesamiento superpuesto más eficaz con menos comunicación; por ejemplo, con un valor de 64, esto mantiene el total de solicitudes pendientes entre 32 y 64. Dado que las invocaciones de método de suscriptor para un determinado Subscription
están estrictamente ordenadas, no es necesario que estos métodos usen bloqueos o volátiles a menos que un suscriptor mantenga varias suscripciones (en cuyo caso es mejor definir varios suscriptores, cada uno con su propia suscripción).
{@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() {}
}}
El valor predeterminado de puede proporcionar un punto de #defaultBufferSize
partida útil para elegir tamaños y capacidades de solicitud en componentes de Flow en función de las tasas, recursos y usos esperados. O bien, cuando nunca se necesita el control de flujo, un suscriptor puede solicitar inicialmente un número de elementos sin enlazar eficazmente, como en:
{@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) { ... }
}}
Agregado en 9.
Documentación de Java para java.util.concurrent.Flow
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.
Propiedades
Class |
Devuelve la clase en tiempo de ejecución de este |
Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
JniIdentityHashCode |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
JniPeerMembers |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
PeerReference |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
ThresholdClass |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. (Heredado de Object) |
ThresholdType |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. (Heredado de Object) |
Métodos
Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
DefaultBufferSize() |
Devuelve un valor predeterminado para el almacenamiento en búfer de publicador o suscriptor, que se puede usar en ausencia de otras restricciones. |
Dispose() |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
Dispose(Boolean) |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
JavaFinalize() |
Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto . (Heredado de Object) |
Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
ToArray<T>() |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
UnregisterFromRuntime() |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
Wait() |
Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em> o <em>interrumpido</em>.<>< (Heredado de Object) |
Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Implementaciones de interfaz explícitas
IJavaPeerable.Disposed() |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
IJavaPeerable.DisposeUnlessReferenced() |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
IJavaPeerable.Finalized() |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
IJavaPeerable.JniManagedPeerState |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
Métodos de extensión
JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
JavaCast<TResult>(IJavaObject) |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |
GetJniTypeName(IJavaPeerable) |
Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que |