tryReady method
尝试准备任务
Implementation
@override
Future<void> tryReady() async {
try {
keys = await _then;
if (isFinished) {
mtLog("任务$debugIdentify 已经完成,完成原因:$_completeOrCancelReason");
assert(false, "已经完成了? - 原因:$_completeOrCancelReason");
return;
}
// task.complete();
} on CancelTaskError {
/// 主动触发取消任务无需做任何事情
mtLog("【X】主动取消任务,$debugIdentify,$_debugCompleteOrCancelReason,原本要添加的元素是: $keys");
// cancel(reason: "请求发生了错误,导致整个任务退出");
return;
} finally {
if (keys == null) {
// 正在取消,还未取消
assert(state != TaskState.cancel);
} else if (keys!.isEmpty) {
cancel(reason: "$debugIdentify : 因为追加的数据是空的列表,所以取消该任务");
} else {
/// 应对可能出现的在midMicroTask完成的情况,好像处理与不处理都是没有任何问题的
/// 假设统一处理所有任务和新来的任务叫A,B
/// 如果A发生在B之前,那么B在本帧处理数据和跳转的操作不会触发,而是留到下一帧或者之后某一帧处理(要注意的是,如果一直没刷新,
/// 那么这个任务会导致所有后续的添加追加任务无法添加进来,因为追加任务一直加不进来,没任务能触发modifyAndJump,这个任务一直
/// 不释放,死锁了)
/// 同时还有一个问题就是,这一帧结束,taskManager中还有一个persisitent任务。。。
if (FrameUtil.phase == SchedulerPhase.midFrameMicrotasks) {
/// TODO:
assert(false, "待调查分析");
}
super.tryReady();
}
}
}