Ejemplo n.º 1
0
        /// <summary>
        /// 更新
        /// </summary>
        public void Update()
        {
            // 更新処理
            var existsNullRun = false;

            for (int i = 0; i < m_runList.Count; i++)
            {
                var r = m_runList[i];
                if (r == null)
                {
                    existsNullRun = true;
                    continue;
                }

                if (r.IsRunning == false)
                {
                    r.Run();
                }

                r.Update();

                if (r.IsDisposed)
                {
                    m_disposedList.Add(r);
                }
                else if (r.IsCompleted)
                {
                    m_completeList.Add(r);
                }
            }

            if (existsNullRun)
            {
                ChipstarLog.Warning("OperationRoutine.Update() exists null-run.");
                m_runList.RemoveAll(n => n == null);
            }

            if (m_completeList.Count > 0)
            {
                for (int i = 0; i < m_completeList.Count; i++)
                {
                    var c = m_completeList[i];
                    if (c.IsDisposed)
                    {
                        m_disposedList.Add(c);
                        continue;
                    }
                    c.Complete();
                }
                m_completeList.Clear();
            }

            if (m_disposedList.Count > 0)
            {
                for (int i = 0; i < m_disposedList.Count; i++)
                {
                    m_disposedList[i].Dispose();
                }
                m_runList.RemoveAll(r => m_disposedList.Contains(r));
                m_disposedList.Clear();
            }
        }