private DailyCounter PrepareCounter(VisitorsCounter counter, int prev = 0) { var model = new DailyCounter { date = counter.LastDate, Count = counter.TodayCount, ToPrev = counter.TodayCount - prev }; return(model); }
public async Task TestRunInParallel_ParallelismDegree(int totalTasks, int maxDegreeOfParallelism) { VisitorsCounter visitorsCounter = new VisitorsCounter(maxDegreeOfParallelism); await TaskUtils.RunInParallel(((Func <Task>)(async() => { visitorsCounter.Enter(); await Task.Delay(RUNNING_TIME); visitorsCounter.Leave(); })).Repeat(totalTasks), maxDegreeOfParallelism); Assert.Zero(visitorsCounter.CurrentVisitors); Assert.AreEqual(totalTasks, visitorsCounter.TotalVisitors); Assert.AreEqual(Math.Min(maxDegreeOfParallelism, totalTasks), visitorsCounter.MaxConcurrentVisitors); }
public void TestRunInParallel_ErrorHandling(ICollection <bool> whenToThrowException, int maxDegreeOfParallelism) { VisitorsCounter visitorsCounter = new VisitorsCounter(maxDegreeOfParallelism); IEnumerable <Func <Task> > opeartions = whenToThrowException.Select((toThrow) => (Func <Task>)(async() => { visitorsCounter.Enter(); await Task.Delay(RUNNING_TIME); visitorsCounter.Leave(); if (toThrow) { throw new ArgumentException(); } })); int errorsNumber = whenToThrowException.Count((b) => b); Assert.AreEqual(errorsNumber, Assert.ThrowsAsync <AggregateException>(() => TaskUtils.RunInParallel(opeartions, maxDegreeOfParallelism)).InnerExceptions.Count); Assert.Zero(visitorsCounter.CurrentVisitors); Assert.AreEqual(whenToThrowException.Count, visitorsCounter.TotalVisitors); Assert.AreEqual(Math.Min(maxDegreeOfParallelism, whenToThrowException.Count), visitorsCounter.MaxConcurrentVisitors); }
/// <summary> /// обновление статистики в бд /// </summary> public void SaveCounters() { var data = _context.GetAll.FirstOrDefault(c => c.LastDate == DateTime.Today); if (data != null) { data.TotalCount = _totalCounter; data.TodayCount = _todayCounter; _context.Update(data); return; } var storedData = new VisitorsCounter { LastDate = _currentDate, TodayCount = _todayCounter, TotalCount = _totalCounter }; _context.Add(storedData); }