task-29: 退避配置项(MaxMs/Factor)
task-progress-config.ts 新增 getTaskPollBackoffMaxMs()(默认 10000, 由 5000 提升)与 getTaskPollBackoffFactor()(默认 2,<1 钳制为 1); configureTaskPolling 支持 backoffFactor;getTaskPollBackoffMs 改用 base × factor^attempt 计算。 既有 task-086 边界测试中封顶 5000 的快照随新默认更新为 10000。 新增 8 个测试:max/factor 默认、可覆盖、非正钳制、factor 下限、 配置隔离、默认值快照。
This commit is contained in:
@@ -18,7 +18,8 @@ export const TASK_POLL_HIDDEN_INTERVAL_MS = 60000;
|
||||
export const TASK_PROGRESS_VISIBLE_CACHE_MILLIS = 5000;
|
||||
export const TASK_PROGRESS_HIDDEN_CACHE_MILLIS = 30000;
|
||||
export const TASK_POLL_BACKOFF_BASE_MS = 500;
|
||||
export const TASK_POLL_BACKOFF_MAX_MS = 5000;
|
||||
export const TASK_POLL_BACKOFF_MAX_MS = 10000;
|
||||
export const TASK_POLL_BACKOFF_FACTOR = 2;
|
||||
export const TASK_PROGRESS_TIMEOUT_MS = 10000;
|
||||
|
||||
export interface TaskPollingConfig {
|
||||
@@ -26,6 +27,8 @@ export interface TaskPollingConfig {
|
||||
backoffBaseMs?: number;
|
||||
/** 退避上限(毫秒),必须为正数 */
|
||||
backoffMaxMs?: number;
|
||||
/** 退避指数因子,<1 时钳制为 1 */
|
||||
backoffFactor?: number;
|
||||
/** 页面切回前台时是否立即拉取一轮,默认 true */
|
||||
foregroundRefreshEnabled?: boolean;
|
||||
/** 前台恢复延迟(毫秒),默认 0 */
|
||||
@@ -37,6 +40,7 @@ export interface TaskPollingConfig {
|
||||
const DEFAULTS: Required<TaskPollingConfig> = {
|
||||
backoffBaseMs: TASK_POLL_BACKOFF_BASE_MS,
|
||||
backoffMaxMs: TASK_POLL_BACKOFF_MAX_MS,
|
||||
backoffFactor: TASK_POLL_BACKOFF_FACTOR,
|
||||
foregroundRefreshEnabled: true,
|
||||
foregroundRefreshDelayMs: 0,
|
||||
progressTimeoutMs: TASK_PROGRESS_TIMEOUT_MS,
|
||||
@@ -62,11 +66,21 @@ export function getTaskProgressCacheTtlMs() {
|
||||
return TASK_PROGRESS_VISIBLE_CACHE_MILLIS;
|
||||
}
|
||||
|
||||
/** 第 attempt 次退避延迟:base × 2^attempt,封顶 max;attempt 非法时按首次(0)处理 */
|
||||
/** 第 attempt 次退避延迟:base × factor^attempt,封顶 max;attempt 非法时按首次(0)处理 */
|
||||
export function getTaskPollBackoffMs(attempt: number) {
|
||||
const safe = Number.isFinite(attempt) && attempt > 0 ? Math.floor(attempt) : 0;
|
||||
const doubled = config.backoffBaseMs * Math.pow(2, safe);
|
||||
return doubled > config.backoffMaxMs ? config.backoffMaxMs : doubled;
|
||||
const factor = getTaskPollBackoffFactor();
|
||||
const scaled = config.backoffBaseMs * Math.pow(factor, safe);
|
||||
return scaled > config.backoffMaxMs ? config.backoffMaxMs : scaled;
|
||||
}
|
||||
|
||||
export function getTaskPollBackoffMaxMs() {
|
||||
return config.backoffMaxMs;
|
||||
}
|
||||
|
||||
/** 退避指数因子,<1 时钳制为 1 */
|
||||
export function getTaskPollBackoffFactor() {
|
||||
return config.backoffFactor < 1 ? 1 : config.backoffFactor;
|
||||
}
|
||||
|
||||
export function getTaskForegroundRefreshEnabled() {
|
||||
|
||||
Reference in New Issue
Block a user