Язык

Flow Класс

Определение

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется 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
Наследование
Атрибуты

Комментарии

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

Эти интерфейсы соответствуют спецификации реактивных потоков . Они применяются как в параллельных, так и распределенных асинхронных параметрах: все методы (семь) определяются в void односторонном стиле сообщений. Обмен данными зависит от простой формы управления потоками (метода Subscription#request), которую можно использовать для предотвращения проблем управления ресурсами, которые могут возникнуть в системах на основе push-уведомлений.

<Примеры>.</b> обычно Publisher определяет собственную Subscription реализацию; создание одного в методе subscribe и его выдача вызову Subscriber. Он публикует элементы для подписчика асинхронно, обычно с помощью Executor. Например, вот очень простой издатель, который возникает только при запросе одного TRUE элемента для одного подписчика. Так как подписчик получает только один элемент, этот класс не использует управление буферизацией и упорядочиванием, необходимым в большинстве реализаций.

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

Упорядочивает Subscriber запросы и обработку элементов. Элементы (вызовы Subscriber#onNext) не выдаются, если не запрашиваются, но могут запрашиваться несколько элементов. Многие реализации подписчиков могут упорядочить это в стиле следующего примера, где размер буфера в 1 однофакторной и более крупные размеры обычно позволяют более эффективно перекрывать обработку с меньшим количеством обмена данными; Например, со значением 64, это обеспечивает общий объем невыполненных запросов в диапазоне от 32 до 64. Так как вызовы метода подписчика для заданного типа Subscription строго упорядочены, для этих методов не требуется использовать блокировки или переменные, если подписчик не поддерживает несколько подписок (в этом случае лучше определить несколько подписчиков, каждый из которых имеет собственную подписку).

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

Значение #defaultBufferSize по умолчанию может предоставить полезную отправную точку для выбора размеров запросов и емкостей в компонентах Flow на основе ожидаемых ставок, ресурсов и использования. Или, если управление потоком никогда не требуется, подписчик может первоначально запрашивать фактически неограниченное количество элементов, как и в:

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

Добавлено в 9.

Java документации по java.util.concurrent.Flow.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Свойства

Имя. Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
JniPeerMembers

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)

Методы

Имя. Описание
Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
DefaultBufferSize()

Возвращает значение по умолчанию для буферизации Publisher или подписчика, которое может использоваться в отсутствие других ограничений.

Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
Equals(Object)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает хэш-значение кода для объекта.

(Унаследовано от Object)
JavaFinalize()
Устаревшие.

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
Notify()

Просыпается один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.>

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя. Описание
IJavaPeerable.Disposed()

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

(Унаследовано от JavaObject)

Методы расширения

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых Publisher Publishers создаются элементы, потребляемые одним или несколькими Subscriber Subscribers, каждый из которых управляется Subscription Subscription.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к