示例#1
0
        /// <summary>
        /// Добавить задачу в очередь
        /// </summary>
        /// <param name="key">ключь</param>
        /// <param name="actionParams">значение</param>
        /// <param name="token">токен отмены операции</param>
        /// <remarks>при добавлении новой задачи очередь автоматически начинает выполняться,
        /// при этом первыми будут выполнены ранее сохраненные задачи</remarks>
        public void Enqueue(TKey key, TActionParams actionParams, CancellationToken?token = null)
        {
            Start(token);//продолжить выполнять задачи, если они есть в очереди

            //добавить в очередь задачу
            lock (Lock)
            {
                Repository.Set(key, actionParams);
                if (_autoSave)
                {
                    Save();
                }


                if (ProcessingTasks.Contains(key))
                {
                    throw new Exception(string.Format("Задача с ключом {0} уже выполнялась", key));
                }

                if (PoolTasks.Contains(key))
                {
                    throw new Exception(string.Format("Задача с ключом {0} уже содержется в пуле", key));
                }

                if (FailTasks.Contains(key))
                {
                    throw new Exception(string.Format("Задача с ключом {0} уже завершилась ошибкой", key));
                }

                PoolTasks.Add(key);
                Pool.Invoke(Perform, key, actionParams, token);
            }
        }
示例#2
0
 private void Awake()
 {
     if (Instance != null)
     {
         Destroy(this);
     }
     else
     {
         Instance = this;
     }
 }