prex-es5
Version:
Async coordination primitives and extensions on top of ES6 Promises
341 lines (282 loc) • 13.7 kB
Markdown
<!--
Copyright (c) Microsoft Corporation.
Licensed under the Apache License, Version 2.0.
See LICENSE file in the project root for details.
-->
# Coordination
[Back to Index](index.md)
### Table of Contents
* [Class: ManualResetEvent](#class-manualresetevent)
* [new ManualResetEvent(initialState?)](#new-manualreseteventinitialstate)
* [manual.isSet](#manualisset)
* [manual.set()](#manualset)
* [manual.reset()](#manualreset)
* [manual.wait(token?)](#manualwaittoken)
* [Class: AutoResetEvent](#class-autoresetevent)
* [new AutoResetEvent(initialState?)](#new-autoreseteventinitialstate)
* [auto.set()](#autoset)
* [auto.reset()](#autoreset)
* [auto.wait(token?)](#autowaittoken)
* [Class: Semaphore](#class-semaphore)
* [new Semaphore(initialCount, maxCount?)](#new-semaphoreinitialcount-maxcount)
* [semaphore.count](#semaphorecount)
* [semaphore.wait(token?)](#semaphorewaittoken)
* [semaphore.release(count?)](#semaphorereleasecount)
* [Class: CountdownEvent](#class-countdownevent)
* [new CountdownEvent(initialCount)](#new-countdowneventinitialcount)
* [countdown.initialCount](#countdowninitialcount)
* [countdown.remainingCount](#countdownremainingcount)
* [countdown.add(count?)](#countdownaddcount)
* [countdown.reset(count?)](#countdownresetcount)
* [countdown.signal(count?)](#countdownsignalcount)
* [countdown.wait(token?)](#countdownwaittoken)
* [Class: Barrier](#class-barrier)
* [new Barrier(participantCount, postPhaseAction?)](#new-barrierparticipantcount-postphaseaction)
* [barrier.currentPhaseNumber](#barriercurrentphasenumber)
* [barrier.participantCount](#barrierparticipantcount)
* [barrier.remainingParticipants](#barrierremainingparticipants)
* [barrier.add(participantCount?)](#barrieraddparticipantcount)
* [barrier.remove(participantCount?)](#barrierremoveparticipantcount)
* [barrier.signalAndWait(token?)](#barriersignalandwaittoken)
* [Class: ReaderWriterLock](#class-readerwriterlock)
* [new ReaderWriterLock()](#new-readerwriterlock)
* [lock.read(token?)](#lockreadtoken)
* [lock.upgradeableRead(token?)](#lockupgradeablereadtoken)
* [lock.write(token?)](#lockwritetoken)
* [Interface: LockHandle](#interface-lockhandle)
* [handle.release()](#handlerelease)
* [Interface: UpgradeableLockHandle](#interface-upgradeablelockhandle)
* [handle.upgrade(token?)](#handleupgradetoken)
* [Class: Deferred](#class-deferred)
* [new Deferred()](#new-deferred)
* [deferred.promise](#deferredpromise)
* [deferred.resolve](#deferredresolve)
* [deferred.reject](#deferredreject)
# Class: ManualResetEvent
Asynchronously notifies one or more waiting Promises that an event has occurred.
### Syntax
```ts
export declare class ManualResetEvent {
constructor(initialState?: boolean);
readonly isSet: boolean;
set(): void;
reset(): void;
wait(token?: CancellationToken): Promise<void>;
}
```
## new ManualResetEvent(initialState?)
Initializes a new instance of the ManualResetEvent class.
* `initialState` [<Boolean>][Boolean] A value indicating whether to set the initial state to signaled.
## manual.isSet
Gets a value indicating whether the event is signaled.
* Returns: [<Boolean>][Boolean]
## manual.set()
Sets the state of the event to signaled, resolving one or more waiting Promises.
## manual.reset()
Sets the state of the event to nonsignaled, causing asynchronous operations to pause.
## manual.wait(token?)
Asynchronously waits for the event to become signaled.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves when the event is signaled, or rejects if the token is canceled.
# Class: AutoResetEvent
Asynchronously notifies one or more waiting Promises that an event has occurred.
### Syntax
```ts
export declare class AutoResetEvent {
constructor(initialState?: boolean);
set(): void;
reset(): void;
wait(token?: CancellationToken): Promise<void>;
}
```
## new AutoResetEvent(initialState?)
Initializes a new instance of the AutoResetEvent class.
* `initialState` [<Boolean>][Boolean] A value indicating whether to set the initial state to signaled.
## auto.set()
Sets the state of the event to signaled, resolving one or more waiting Promises.
The event is then automatically reset.
## auto.reset()
Sets the state of the event to nonsignaled, causing asynchronous operations to pause.
## auto.wait(token?)
Asynchronously waits for the event to become signaled.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves when the event is signaled, or rejects if the token is canceled.
# Class: Semaphore
Limits the number of asynchronous operations that can access a resource
or pool of resources.
### Syntax
```ts
export declare class Semaphore {
constructor(initialCount: number, maxCount?: number);
readonly count: number;
wait(token?: CancellationToken): Promise<void>;
release(count?: number): void;
}
```
## new Semaphore(initialCount, maxCount?)
Initializes a new instance of the Semaphore class.
* `intialCount` [<Number>][Number] The initial number of entries.
* `maxCount` [<Number>][Number] The maximum number of entries.
## semaphore.count
Gets the number of remaining asynchronous operations that can enter
the Semaphore.
* Returns: [<Number>][Number]
## semaphore.wait(token?)
Asynchronously waits for the event to become signaled.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves when the event is signaled, or rejects if the token is canceled.
## semaphore.release(count?)
Releases the Semaphore one or more times.
* `count` [<Number>][Number] The number of times to release the Semaphore.
# Class: CountdownEvent
An event that is set when all participants have signaled.
### Syntax
```ts
export declare class CountdownEvent {
constructor(initialCount: number);
readonly initialCount: number;
readonly remainingCount: number;
add(count?: number): void;
reset(count?: number): void;
signal(count?: number): void;
wait(token?: CancellationToken): Promise<void>;
}
```
## new CountdownEvent(initialCount)
Initializes a new instance of the [CountdownEvent](#class-countdownevent) class.
* `initialCount` [<Number>][Number] The initial participant count.
## countdown.initialCount
Gets the number of signals initially required to set the event.
* Returns: [<Number>][Number]
## countdown.remainingCount
Gets the number of remaining signals required to set the event.
* Returns: [<Number>][Number]
## countdown.add(count?)
Increments the event's current count by one or more.
* `count` [<Number>][Number] An optional count specifying the additional number of signals for which the event will wait.
## countdown.reset(count?)
Resets the remaining and initial count to the specified value, or the initial count.
* `count` [<Number>][Number] An optional count specifying the number of required signals.
## countdown.signal(count?)
Registers one or more signals with the CountdownEvent, decrementing the remaining count.
* `count` [<Number>][Number] An optional count specifying the number of signals to register.
## countdown.wait(token?)
Asynchronously waits for the event to become signaled.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves when the event is signaled, or rejects if the token is canceled.
# Class: Barrier
Enables multiple tasks to cooperatively work on an algorithm through
multiple phases.
### Syntax
```ts
export declare class Barrier {
constructor(participantCount: number, postPhaseAction?: (barrier: Barrier) => void | PromiseLike<void>);
readonly currentPhaseNumber: number;
readonly participantCount: number;
readonly remainingParticipants: number;
add(participantCount?: number): void;
remove(participantCount?: number): void;
signalAndWait(token?: CancellationToken): Promise<void>;
}
```
## new Barrier(participantCount, postPhaseAction?)
Initializes a new instance of the Barrier class.
* `participantCount` [<Number>][Number] The initial number of participants for the barrier.
* `postPhaseAction` [<Function>][Function] An action to execute between each phase.
## barrier.currentPhaseNumber
Gets the number of the Barrier's current phase.
* Returns: [<Number>][Number]
## barrier.participantCount
Gets the total number of participants in the barrier.
* Returns: [<Number>][Number]
## barrier.remainingParticipants
Gets the number of participants in the barrier that haven't yet signaled in the current phase.
* Returns: [<Number>][Number]
## barrier.add(participantCount?)
Notifies the Barrier there will be additional participants.
* `participantCount` [<Number>][Number] The number of additional participants.
## barrier.remove(participantCount?)
Notifies the Barrier there will be fewer participants.
* `participantCount` [<Number>][Number] The number of participants to remove.
## barrier.signalAndWait(token?)
Signals that a participant has reached the barrier and waits for all other participants
to reach the barrier.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves when all participants have signaled, or rejects if the token is canceled.
# Class: ReaderWriterLock
Coordinates readers and writers for a resource.
### Syntax
```ts
export declare class ReaderWriterLock {
constructor();
read(token?: CancellationToken): Promise<LockHandle>;
upgradeableRead(token?: CancellationToken): Promise<UpgradeableLockHandle>;
write(token?: CancellationToken): Promise<LockHandle>;
}
```
## new ReaderWriterLock()
Initializes a new instance of the ReaderWriterLock class.
## lock.read(token?)
Asynchronously waits for and takes a read lock on a resource.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves with a [LockHandle](#interface-lockhandle) when the lock is taken, or rejects if the token is canceled.
## lock.upgradeableRead(token?)
Asynchronously waits for and takes a read lock on a resource that can later be upgraded to a write lock.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves with a [LockHandle](#interface-lockhandle) when the lock is taken, or rejects if the token is canceled.
## lock.write(token?)
Asynchronously waits for and takes a write lock on a resource.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves with a [LockHandle](#interface-lockhandle) when the lock is taken, or rejects if the token is canceled.
# Interface: LockHandle
An object used to release a held lock.
### Syntax
```ts
export interface LockHandle {
release(): void;
}
```
# handle.release()
Releases the lock.
# Interface: UpgradeableLockHandle
An object used to release a held lock or upgrade to a write lock.
### Syntax
```ts
export interface UpgradeableLockHandle {
upgrade(token?: CancellationToken): Promise<LockHandle>;
}
```
# handle.upgrade(token?)
Upgrades the lock to a write lock.
* `token` [<CancellationToken>][CancellationToken] A CancellationToken used to cancel the request.
* Returns: [<Promise>][Promise] A Promise that resolves with a [LockHandle](#interface-lockhandle) when the lock is taken, or rejects if the token is canceled.
# Class: Deferred
Encapsulates a Promise and exposes its resolve and reject callbacks.
### Syntax
```ts
export declare class Deferred<T> {
constructor();
readonly promise: Promise<T>;
resolve(value?: PromiseLike<T> | T): void;
reject(reason: any): void;
}
```
## new Deferred()
Initializes a new instance of the Deferred class.
## deferred.promise
Gets the promise.
* Returns: [<Promise>][Promise]
## deferred.resolve(value?)
Resolves the promise.
* `value` <`any`> The value used to resolve the promise.
## deferred.reject(reason)
Rejects the promise.
* `reason` <`any`> The reason the promise was rejected.
[String]: http://ecma-international.org/ecma-262/6.0/index.html#sec-string-constructor
[Boolean]: http://ecma-international.org/ecma-262/6.0/index.html#sec-boolean-constructor
[Number]: http://ecma-international.org/ecma-262/6.0/index.html#sec-number-constructor
[Function]: http://ecma-international.org/ecma-262/6.0/index.html#sec-function-constructor
[Error]: http://ecma-international.org/ecma-262/6.0/index.html#sec-error-constructor
[Promise]: http://ecma-international.org/ecma-262/6.0/index.html#sec-promise-constructor
[Iterable]: http://ecma-international.org/ecma-262/6.0/index.html#sec-symbol.iterator
[CancellationToken]: cancellation.md#class-cancellationtoken