public void StartExpirationTask()
        {
            if (m_expiration_time == FixPoint.MaxValue)
            {
                return;
            }
            if (m_task == null)
            {
                m_task = LogicTask.Create <EffectExpireTask>();
                m_task.Construct(GetOwnerEntityID(), ParentObject.ID);
            }
            FixPoint current_time = GetCurrentTime();
            var      schedeler    = GetLogicWorld().GetTaskScheduler();
            FixPoint delay        = m_expiration_time - current_time;

            schedeler.Schedule(m_task, current_time, delay);
        }
        protected override void OnDestruct()
        {
            EffectGenerator generator = GetLogicWorld().GetEffectManager().GetGenerator(m_generator_id);

            if (generator == null)
            {
                return;
            }
            EffectGeneratorEntry entry = generator.GetEntry(m_entry_index);

            if (entry == null)
            {
                return;
            }
            entry.RemoveEffect(ParentObject.ID);

            if (m_task != null)
            {
                m_task.Cancel();
                LogicTask.Recycle(m_task);
                m_task = null;
            }
        }