public void AddThreadedSchedule(Action Action, Action OnComplete = null)
        {
            ThreadedSchedule info = new ThreadedSchedule()
            {
                Action = Action, IsCompleted = false, OnComplete = OnComplete
            };

            threadedScheduleList.Add(info);

            ThreadPool.QueueUserWorkItem((state) =>
            {
                ThreadedSchedule info1 = (ThreadedSchedule)state;

                info1?.Action.Invoke();

                lock (info)
                {
                    info1.IsCompleted = true;
                }
            }, info);
        }
        private void Update()
        {
            for (int i = 0; i < scheduleList.Count; ++i)
            {
                ScheduleObj obj = scheduleList[i];

                obj.Update();
                if (obj.IsDone)
                {
                    scheduleList.RemoveAt(i--);
                }
            }

            for (int i = 0; i < threadedScheduleList.Count; ++i)
            {
                ThreadedSchedule info = threadedScheduleList[i];

                lock (info)
                {
                    if (!info.IsCompleted)
                    {
                        continue;
                    }
                }

                try
                {
                    info.OnComplete?.Invoke();

                    threadedScheduleList.RemoveAt(i--);
                }catch (Exception e)
                {
                    Debug.LogError(e);
                }
            }
        }