public bool Validate(SimpleTask task) { bool isValid = false; bool isCheckerListLocked = true; do { if (Monitor.TryEnter(TheBestTaskNameCheckerInTheWorld.Names, 0)) { isCheckerListLocked = true; try { lock (TheBestTaskNameCheckerInTheWorld.Names) { isValid = !TheBestTaskNameCheckerInTheWorld.Check(task.Name); if (isValid) { TheBestTaskNameCheckerInTheWorld.Names.Add(task.Name); } } } finally { Monitor.Exit(TheBestTaskNameCheckerInTheWorld.Names); isCheckerListLocked = false; } } } while (isCheckerListLocked); return(isValid); }
public SimpleTasksController(ISimpleTaskRepository simpleTaskRepository) { _simpleTaskRepository = simpleTaskRepository; _mapperConfiguration = new MapperConfiguration(cfg => { cfg.CreateMap <SimpleTask, SimpleTaskDto>(); cfg.CreateMap <SimpleTaskDto, SimpleTask>(); cfg.CreateMap <SimpleTaskBaseDto, SimpleTask>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name)) .ForMember(dest => dest.CreatedBy, opt => opt.MapFrom(src => src.CreatedBy)) .ForMember(dest => dest.Status, opt => opt.MapFrom(src => Status.Open)) .ForMember(dest => dest.CreationDateTime, opt => opt.MapFrom(src => DateTime.Now)); }); _iMapper = _mapperConfiguration.CreateMapper(); _numberOfUpsertOperations = _simpleTaskRepository.GetAll().Sum(x => x.NumberOfUpdates); _validatorService = new ValidatorService(); var taskNames = _simpleTaskRepository.GetAll().Select(x => x.Name); TheBestTaskNameCheckerInTheWorld.SyncNames(taskNames); // maybe this should be a singleton...? if (_tasksInProgress == null) { _tasksInProgress = new HashSet <string>(); } }
public ValidatorService() { if (TheBestTaskNameCheckerInTheWorld.Names == null || TheBestTaskNameCheckerInTheWorld.Names.Count == 0) { TheBestTaskNameCheckerInTheWorld.Seed(); } if (_simpleTasksQueue == null) { _simpleTasksQueue = new HashSet <SimpleTask>(); } }