public async Task <IEnumerable <FreezerModel> > ProcessNextTaskAsync() { FreezerTask task = null; IEnumerable <FreezerModel> result = null; lock (this) { if (_todo.Count > 0) { task = _todo.Dequeue(); _doing.Add(task); } } if (task != null) { try { result = await _freezeService.SetEnabledAsync(task.FreezerUniqueId, task.IsEnabled); } finally { lock (this) { _doing.Remove(task); } } } return(result); }
public void Enqueue(FreezerTask task) { if (!DefaultState.Freezers.ContainsKey(task.FreezerUniqueId)) { throw new ArgumentException($"No freezer with id {task.FreezerUniqueId} found."); } lock (this) { var existing = _todo.FirstOrDefault(x => x.FreezerUniqueId == task.FreezerUniqueId); if (existing != null) { existing.IsEnabled = task.IsEnabled; } else { _todo.Enqueue(task); } } }