/**
 * A mutex object to prevent concurrent access of
 * long running asynchronous calls.
 *
 * ```typescript
 * const mutex = new Mutex()
 *
 * mutex.runSequential(async (): Promise<void> => {
 *   if (await longRunningNetworkCall()) {
 *     // Do something...
 *    }
 * })
 * ```
 */
export declare class Mutex {
    #private;
    /**
     * Run a task exclusively and sequentially.
     *
     * @param task The task to run.
     * @return A Promise that resolves to a result.
     */
    runSequential<T>(task: () => Promise<T>): Promise<T>;
    /**
     * Wait for all tasks to complete.
     */
    wait(): Promise<void>;
    /**
     * @returns True if the mutex has outstanding tasks running.
     */
    isLocked(): boolean;
}
