package com.github.shansun.sparrow.retryer;
import com.google.common.base.Predicate;
/**
* 重试支持
*
* @author lanbo <br>
* @version 1.0 <br>
* @date 2012-8-28
*/
public interface Retryer {
/**
* 重做任务
*
* @param <T>
* @param retryableTask
* @return
* @throws Throwable
*/
<T> T executeWithRetry(Retryable<T> retryableTask) throws Throwable;
/**
* 获取重试次数
*
* @return
*/
long getTimes();
/**
* 获取重试间隔,单位毫秒
*
* @return
*/
long getInterval();
/**
* 获取异常捕获条件
*
* @return
*/
Predicate<Throwable> getThrowCondition();
/**
* 获取返回值鉴别条件
*
* @return
*/
Predicate<Object> getReturnCondition();
}