/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Licensed under the Apache License, Version 2.0.

See LICENSE file in the project root for details.
***************************************************************************** */
import { CancellationToken } from "./cancellation";
import { Cancelable } from "@esfx/cancelable";
/**
 * An event that is set when all participants have signaled.
 */
export declare class CountdownEvent {
    private _initialCount;
    private _remainingCount;
    private _event;
    /**
     * Initializes a new instance of the CountdownEvent class.
     *
     * @param initialCount The initial participant count.
     */
    constructor(initialCount: number);
    /**
     * Gets the number of signals initially required to set the event.
     */
    get initialCount(): number;
    /**
     * Gets the number of remaining signals required to set the event.
     */
    get remainingCount(): number;
    /**
     * Increments the event's current count by one or more.
     *
     * @param count An optional count specifying the additional number of signals for which the event will wait.
     */
    add(count?: number): void;
    /**
     * Resets the remaining and initial count to the specified value, or the initial count.
     *
     * @param count An optional count specifying the number of required signals.
     */
    reset(count?: number): void;
    /**
     * Registers one or more signals with the CountdownEvent, decrementing the remaining count.
     *
     * @param count An optional count specifying the number of signals to register.
     */
    signal(count?: number): boolean;
    /**
     * Asynchronously waits for the event to become signaled.
     *
     * @param token An optional CancellationToken used to cancel the request.
     */
    wait(token?: CancellationToken | Cancelable): Promise<void>;
}
