Inheritance: IYieldInstruction, IDisposable
        public void Remove(Coroutine coroutine)
        {
            if (coroutine.ID == 0)
            {
                return;
            }

            coroutinesDict.Remove(coroutine.ID);
        }
        public Coroutine StartCoroutine(IEnumerator routine)
        {
            //LogUtils.Debug("CoroutineManager.StartCoroutine");

            if (disposed)
            {
                return null;
            }

            var coroutine = new Coroutine(routine, this);
            var yielding = coroutine.Start();

            // todo need to check whether this coroutine invoke a timer 
            // record in coroutinesDict
            if (yielding)
            {
                // alloc a id, and record
            }

            return coroutine;
        }
 public void Yield(Coroutine coroutine, Action<Coroutine> callback)
 {
 }
 public void Yield(Coroutine coroutine, Action<Coroutine> callback)
 {
     coroutine.CoroutineManager.TimeManager.AddTimer(WaitTick, (timer, data) => callback(data[0] as Coroutine),
         coroutine);
 }
 public static void YieldReturn(Coroutine coroutine)
 {
     //LogConsole.Debug("Coroutine.YieldReturn");
     coroutine.Resume();
 }
 public void Add(Coroutine coroutine)
 {
     coroutinesDict[coroutine.ID] = coroutine;
 }