/// <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); } }
private void Awake() { if (Instance != null) { Destroy(this); } else { Instance = this; } }