private IEnumerator CoJobHandle(string key) { yield return(null); JobRepeatBase findJob = JobList.Find(x => x.key == key); if (findJob == null) { yield break; } switch (findJob.state) { case JOB_STATE.JOB_EMPTY: yield break; case JOB_STATE.JOB_STANDBY: if (findJob.jobToDoCheck != null) { if (findJob.jobToDoCheck(findJob.parameter)) { findJob.state = JOB_STATE.JOB_WORKING; findJob.jobTodo?.Invoke(findJob.parameter); if (findJob.jobCoroutine != null) { yield return(StartCoroutine(findJob.jobCoroutine)); } findJob.excuteCount++; if (findJob.excuteCount >= findJob.repeatCount && findJob.repeatCount != 0) { findJob.state = JOB_STATE.JOB_DROP; } else { findJob.state = JOB_STATE.JOB_WAITING; } } } else { findJob.state = JOB_STATE.JOB_WORKING; findJob.jobTodo?.Invoke(findJob.parameter); if (findJob.jobCoroutine != null) { yield return(StartCoroutine(findJob.jobCoroutine)); } findJob.excuteCount++; if (findJob.excuteCount >= findJob.repeatCount && findJob.repeatCount != 0) { findJob.state = JOB_STATE.JOB_DROP; } else { findJob.state = JOB_STATE.JOB_WAITING; } } if (findJob.jobAutoDropCheck != null) { if (findJob.jobAutoDropCheck(findJob.parameter)) { findJob.state = JOB_STATE.JOB_DROP; break; } } break; case JOB_STATE.JOB_WAITING: WaitForSeconds WaitForDelay = new WaitForSeconds(findJob.repeatDelay); yield return(WaitForDelay); findJob.state = JOB_STATE.JOB_STANDBY; break; case JOB_STATE.JOB_DROP: yield break; } yield return(StartCoroutine(CoJobHandle(findJob.key))); }