public IEnumerator GBStartCoroutine(string id, IEnumerator routine)
        {
            GlobalCoroutineBehavior gcb = null;

            if (curCoroutineDict.ContainsKey(id))
            {
                gcb = curCoroutineDict[id];
            }
            else
            {
                if (CoroutinePool.Count == 0)
                {
                    GameObject go = new GameObject("GlobalCoroutineBehavior");
                    go.transform.SetParent(transform);
                    gcb = go.AddComponent <GlobalCoroutineBehavior>();
                }
                else
                {
                    gcb = CoroutinePool[0];
                    CoroutinePool.Remove(gcb);
                }
                curCoroutineDict[id] = gcb;
            }
            yield return(gcb.GBStartCoroutine(id, routine));
        }
        public void UTStopCoroutine(string id)
        {
            GlobalCoroutineBehavior gcb = null;

            curCoroutineDict.TryGetValue(id, out gcb);
            if (gcb != null)
            {
                gcb.UTStopCoroutine();
            }
        }
        private void OnCompleteCoroutineBehavior(string id)
        {
            GlobalCoroutineBehavior gcb = null;

            curCoroutineDict.TryGetValue(id, out gcb);
            if (gcb != null)
            {
                if (!CoroutinePool.Contains(gcb))
                {
                    CoroutinePool.Add(gcb);
                }
            }
            if (curCoroutineDict.ContainsKey(id))
            {
                curCoroutineDict.Remove(id);
            }
        }