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 |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| JniPeerMembers |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
Методы
| Имя. | Описание |
|---|---|
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| DefaultBufferSize() |
Возвращает значение по умолчанию для буферизации Publisher или подписчика, которое может использоваться в отсутствие других ограничений. |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| Equals(Object) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| IJavaPeerable.Finalized() |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| IJavaPeerable.JniObjectReferenceControlBlock |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Взаимосвязанные интерфейсы и статические методы для создания управляемых потоком компонентов, в которых |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |