start method
WorkFuture<D, T>
start({
- int retry = 0,
- OnProgress? onSendProgress,
- OnProgress? onReceiveProgress,
override
启动任务
返回包含执行结果T
的WorkFuture。
retry
为内部网络请求失败时的最大重试次数,0表示不重试,实际请求1次,1表示重试1次,实际最多请求两次,以此类推,onSendProgress
为数据发送/上传进度监听器,在HttpMethod.get和HttpMethod.head中无效, 以及设置了WorkRequestOptions.downloadPath的下载任务中无效,onReceiveProgress
为数据接收/下载进度监听器,- 多次调用会启动多次请求
Implementation
@override
WorkFuture<D, T> start({
int retry = 0,
OnProgress? onSendProgress,
OnProgress? onReceiveProgress,
}) {
/// 日志标签
final tag = '$runtimeType@${hashCode.toRadixString(16)}';
log(tag, 'work start');
void Function()? onCancel;
final future = WorkFuture<D, T>._(tag, () => onCancel?.call());
Future<void> onDo() async {
int restart = 0;
dynamic extra;
T data;
do {
data = onCreateWorkData();
data._restartCount = restart;
data.extra = extra;
onCancel = () => data.options?.cancelToken.cancel();
if (!await _onDo(
tag: tag,
data: data,
retry: retry,
onSendProgress: onSendProgress,
onReceiveProgress: onReceiveProgress,
)) {
break;
}
extra = data.extra;
} while (restart++ < onMaxRestart());
future._complete(data);
}
onDo();
return future;
}