private TableResult AddCommandStatusIndex(Guid commandId, CommandProcessingStatus status, string ccid)
 {
     var statusIndex = new CommandProcessingAuditStatusIndexTable
         {
             PartitionKey = status.ToString(),
             RowKey = commandId.ToString(),
             CostCentreId = new Guid(ccid)
         };
     TableOperation to3 = TableOperation.Insert(statusIndex);
     TableResult r3 = _commandStatus.Execute(to3);
     return r3;
 }
        public void SetCommandStatus(Guid commandId, CommandProcessingStatus status)
        {
            _logger.InfoFormat("#### ---> Command {0} SetCommandStatus {1} ", commandId.ToString(), status.ToString());

            string existingStatus = null;
            //update command
            TableResult commandAudit = CommandAuditTableLookup(commandId);
            if (commandAudit == null)
                return;

            CommandProcessingAuditTable command = (CommandProcessingAuditTable)commandAudit.Result;
            existingStatus = ((CommandProcessingStatus)command.Status).ToString();

            var tasks = new List<Task<TableResult>>();

            tasks.Add(Task.Run(() =>
                {
                    command.Status = (int)status;
                    TableOperation updateOperation = TableOperation.Replace(command);
                    return _commandTable.Execute(updateOperation);
                }));


            //add to command status
            if (status == CommandProcessingStatus.Complete) //should not need to index complete??
                return;
            tasks.Add(Task.Run(() =>
                {
                    //remove existing
                    var csFC = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal,commandId.ToString());
                    var csQry = new TableQuery<CommandProcessingAuditStatusIndexTable>().Where(csFC);
                    var csResults = _commandStatus.ExecuteQuery(csQry);
                    foreach (var csResult in csResults)
                    {
                        TableOperation deleteOperation = TableOperation.Delete(csResult);
                        _commandStatus.Execute(deleteOperation);
                    }
                    //add new
                    string ccid = command.PartitionKey;
                    return AddCommandStatusIndex(commandId, status, ccid);
                }));

            Task.WaitAll(tasks.ToArray());
        }