package com.bohuikeji.frame.module.admin.utils;

import com.bohuikeji.frame.module.admin.task.Task;
import com.bohuikeji.frame.module.admin.task.TaskDelayed;
import com.bohuikeji.frame.module.admin.task.TaskQueue;

/**
 * 延时任务工具类
 * 【注意】使用本工具类运行的所有任务都是异步线程，非阻塞
 * @author 孙劲辉
 */
public class TaskUtils {

    /**
     * 添加延时任务——指定延时时间
     * @param task 任务对象
     * @param delayTime 延时时间
     * @return 返回任务控制器
     */
    public static TaskDelayed add(Task task,long delayTime){
        return TaskQueue.put(new TaskDelayed(task,delayTime));
    }

    /**
     * 添加延时任务——使用任务对象设置的默认延时时间
     * @param task 发任务对象
     * @return 返回任务控制器
     */
    public static TaskDelayed add(Task task){
        return TaskQueue.put(new TaskDelayed(task,task.delayTime()));
    }

    /**
     * 立即添加并执行一个新任务
     * @param task 任务对象
     * @return 返回任务控制器
     */
    public static TaskDelayed run(Task task){
        return TaskQueue.put(new TaskDelayed(task,0));
    }

    /**
     * 移除任务
     * @param taskDelayed 任务控制器
     * @return
     */
    public static boolean remove(TaskDelayed taskDelayed){
        return TaskQueue.remove(taskDelayed);
    }

}
