/// <summary> /// Obtains the first available task from the specified queue, and changes the client's /// state into TaskReserved. In that state, no new tasks can be reserved until the /// task's outcome is evident. /// </summary> /// <param name="queue"></param> /// <returns></returns> public TaskMessage Reserve(QueueName queue) { if (_state == RedisQueueState.TaskReserved) throw new TaskAlreadyReservedException("Cannot reserve multiple tasks at once."); if (string.IsNullOrEmpty(queue.ToString())) throw new NoQueueSpecifiedException( "Parameter <queue> is empty or null. Cannot retrieve task for no queue."); if (_taskMessageClient.Lists[queue.NameWhenPending].Count == 0) throw new QueueIsEmptyException("No tasks available in specified queue."); CurrentTask = _taskMessageClient.Lists[queue.NameWhenPending].RemoveStart(); _state = RedisQueueState.TaskReserved; _log.Info("Reserved task from [" + queue.NameWhenPending + "]"); _log.DebugFormat("Task Parameters: {0}", CurrentTask.Parameters); return CurrentTask; }
/// <summary> /// Returns all succeeded tasks. /// </summary> /// <param name="queue"></param> /// <returns></returns> public IList<TaskMessage> SucceededTasks(QueueName queue) { if (string.IsNullOrEmpty(queue.ToString())) throw new NoQueueSpecifiedException( "Parameter <queue> is empty or null. Cannot retrieve task for no queue."); return _taskMessageClient.Lists[queue.NameWhenSucceeded]; }