public UserPasswordBatch NextBatch(string actorPath)
            {
                var nextBatchId = BatchesToProcess.Dequeue();
                var nextBatch   = PasswordBatches.First(b => b.BatchId == nextBatchId);

                BatchesInProgess.Add(nextBatchId, actorPath);

                return(nextBatch);
            }
            public void BatchFailed(string actorPath)
            {
                var inProgress = BatchesInProgess
                                 .Where(bd => bd.Value == actorPath)
                                 .Select(b => b.Key)
                                 .ToList();

                if (!inProgress.Any())
                {
                    return;
                }

                foreach (var batchId in inProgress)
                {
                    BatchesInProgess.Remove(batchId);
                    BatchesToProcess.Enqueue(batchId);
                }
            }
 public void CompleteBatch(BatchFinished batch)
 {
     BatchesInProgess.Remove(batch.BatchId);
     ProcessedPasswords.AddRange(batch.NewPasswords);
 }