tryReady method

  1. @override
Future<void> tryReady()
override

尝试准备任务

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();
    }
  }
}