package xyz.wbsite.frame.schedule;

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.util.Assert;

import java.time.Duration;
import java.util.concurrent.ScheduledFuture;

/**
 * 间隔重复任务，任务A执行结束后，间隔指定时间后开始执行B
 * 倘若A未执行完，B一直处于等待状态
 *
 * @author wangbing
 * @version 0.0.1
 * @since 2020-01-01
 */
public abstract class RunDelayRepeatTask extends RunTask {

    public abstract Duration interval();

    @Override
    public ScheduledFuture<?> schedule(ThreadPoolTaskScheduler poolTaskScheduler) {
        Assert.notNull(poolTaskScheduler, "ThreadPoolTaskScheduler must not be null");
        return poolTaskScheduler.scheduleWithFixedDelay(this, interval());
    }
}
