/// <reference types="node" />
import { EventEmitter as Event } from "events";
interface ISubscribeTask {
    /**
     * Register task
     *
     * @param {string} taskName
     * @param {(...args) => Promise<any>} task
     * @param {boolean} polling
     * @param {number} timer
     * @returns {ISubscribeTask}
     * @memberof ISubscribeTask
     */
    register(taskName: string, task: (...args: any[]) => Promise<any>, polling: boolean, timer: number): ISubscribeTask;
    /**
     * Start task
     *
     * @param {string} taskName
     * @param {*} args
     * @returns {ISubscribeTask}
     * @memberof ISubscribeTask
     */
    start(taskName: string, ...args: any[]): ISubscribeTask;
    /**
     * Stop polling
     *
     * @param {string} taskName
     * @returns {ISubscribeTask}
     * @memberof ISubscribeTask
     */
    stopPolling(taskName: string): ISubscribeTask;
    /**
     * Stop all polling tasks
     *
     * @returns {ISubscribeTask}
     * @memberof ISubscribeTask
     */
    stopAll(): ISubscribeTask;
    /**
     * Remove registered task
     *
     * @param {string} taskName
     * @returns {ISubscribeTask}
     * @memberof ISubscribeTask
     */
    removeTask(taskName: string): ISubscribeTask;
    /**
     * Remove all registered tasks
     *
     * @returns {ISubscribeTask}
     * @memberof ISubscribeTask
     */
    removeAll(): ISubscribeTask;
}
export default class SubscribeTask extends Event implements ISubscribeTask {
    private taskMap;
    private taskIdMap;
    constructor();
    /**
     * Register task
     *
     * @param {string} taskName task name
     * @param {(...args) => Promise<any>} task
     * @param {boolean} [polling=true] whether polling
     * @param {number} [timer=5000] interval time
     * @returns {SubscribeTask}
     * @memberof SubscribeTask
     */
    register(taskName: string, task: (...args: any[]) => Promise<any>, polling?: boolean, timer?: number): SubscribeTask;
    /**
     * Start task
     *
     * If polling is true when register, would polling excute the task.
     *
     * Emit event of task name after the task is finished.
     *
     * @param {string} taskName task name
     * @param {*} args
     * @returns {SubscribeTask}
     * @memberof SubscribeTask
     */
    start(taskName: string, ...args: any[]): SubscribeTask;
    /**
     * Stop polling
     *
     * @param {string} taskName
     * @returns {SubscribeTask}
     * @memberof SubscribeTask
     */
    stopPolling(taskName: string): SubscribeTask;
    /**
     * Stop all polling tasks
     *
     * @returns {SubscribeTask}
     * @memberof SubscribeTask
     */
    stopAll(): SubscribeTask;
    /**
     * Remove registered task
     *
     * @param {string} taskName
     * @returns {SubscribeTask}
     * @memberof SubscribeTask
     */
    removeTask(taskName: string): SubscribeTask;
    /**
     * Remove all registered tasks
     *
     * @returns {SubscribeTask}
     * @memberof SubscribeTask
     */
    removeAll(): SubscribeTask;
    private polling;
    private getTask;
    private getTaskId;
}
export {};
