private static void OnTimedEvent(string identity, Entities entities) { var originalTextRepository = new OriginalTextRepository(entities); try { PoccessTexts(identity, originalTextRepository, entities); entities = new Entities(); var count = entities.OriginalTexts.Count(t => t.ProcessedText == null); if (count != 0) { OnTimedEvent(identity, entities); } } catch (DbUpdateConcurrencyException e) { Console.WriteLine("DbUpdateConcurrencyException {0}", identity); entities = new Entities(); var count = entities.OriginalTexts.Count(t => t.ProcessedText == null); if (count != 0) { Console.WriteLine(identity); OnTimedEvent(identity, new Entities()); } } catch (DataException) { Console.WriteLine("DataException. Что-то пошло не так. Свяжитесь с системный администратором."); } }
private static void PoccessTexts(string identity, OriginalTextRepository originalTextRepository, Entities entities) { var testsToGenerate = originalTextRepository.GetAll(t => t.ProcessedText == null).Take(10).ToList(); testsToGenerate .ForEach( t => { t.ProcessedText = "test - " + identity; t.ProcessedDate = DateTime.Now; } ); entities.SaveChanges(); }
private void PoccessTextsPart(OriginalTextRepository originalTextRepository, Entities entities) { var testsToGenerate = originalTextRepository .GetAll(t => t.ProcessedText == null) .Take(Config.PollingPartSize) .ToList(); testsToGenerate .ForEach( t => { t.ProcessedText = GenerateMarkovChain(t.Text); t.ProcessedDate = DateTime.Now; } ); entities.SaveChanges(); }
/// <summary> /// Рекурсивная обработка не обработанных текстов /// </summary> /// <param name="entities">Экземпляр контекста</param> /// <param name="start">Время первого запуска метода</param> private void ProccessTexts(Entities entities, DateTime start) { //На основе контекста инициализируем репозиторий var originalTextRepository = new OriginalTextRepository(entities); //кол-во необработанных текстов var count = 1; while (count != 0) { //Пытаемся обработать порцию текстов try { PoccessTextsPart(originalTextRepository, entities); } //если кто-то уже обработал текста повторяем попытку, если в базе еще остались необработанные текста catch (DbUpdateConcurrencyException dbocex) { Logger.Error(dbocex); } catch (DataException dex) { Logger.Error(dex); break; } if (DateTime.Now.Subtract(start).Minutes >= Config.MaximumPoolingRuntimeInMinutes) { break; } entities = new Entities(); originalTextRepository = new OriginalTextRepository(entities); count = entities.OriginalTexts.Count(t => t.ProcessedText == null); } }