public void BackgroundModule_CountLoads_CountLoads() { var background = new BackgroundModule(new QueueConfiguration(1, 100)); background.Start(); var search = new TestSelectTask("", new List <ServerId>(), "", new FieldDescription("", typeof(int))); background.Run(search, () => search.BackgroundLoadInner(() => SystemSearchStateInner.AllDataAvailable, null, null)); Thread.Sleep(TimeSpan.FromMilliseconds(100)); Assert.AreEqual(1, search.CountLoads); search.GetDataInner(); Thread.Sleep(TimeSpan.FromMilliseconds(100)); Assert.AreEqual(2, search.CountLoads); Thread.Sleep(TimeSpan.FromMilliseconds(100)); Assert.AreEqual(2, search.CountLoads); search.Finish = true; search.GetDataInner(); Thread.Sleep(TimeSpan.FromMilliseconds(100)); Assert.AreEqual(3, search.CountLoads); search.GetDataInner(); Thread.Sleep(TimeSpan.FromMilliseconds(100)); Assert.AreEqual(3, search.CountLoads); background.Dispose(); }
private SelectReader CreateOrderReader(string query, int limitCount, int userPage, ScriptType type, List <FieldDescription> userParameters) { var function = _mergeBase.GetMergeFunction(type); if (function == null) { throw new Exception(Errors.CannotParseQuery); } var description = _scriptParser.PrepareOrderScriptInner(query, _dataLoader.SystemPage + 2); description.Item1.PageSize = userPage; description.Item1.IsFirstAsk = true; if (description == null) { throw new Exception(Errors.CannotParseQuery); } var servers = _distributor.GetAvailableServers(); var searchTask = new OrderSelectTask(servers, description.Item1, description.Item1, description.Item2, limitCount, userPage, userParameters, _tableName); _scriptParser.PrepareStartPages(searchTask.SearchTasks); _dataLoader.LoadAllPagesParallel(searchTask.SearchTasks); searchTask.ClearServers(); description.Item1.IsFirstAsk = false; var result = function(searchTask, searchTask.SearchTasks); searchTask.CalculateCanRead(); if ((result.Count < limitCount || limitCount == -1) && searchTask.IsCanRead()) { _backgroundModule.Run(searchTask, () => searchTask.BackgroundLoadInner(_distributor.GetState, _dataLoader, function)); } else { searchTask.SetFinish(); } var reader = new SelectReader(searchTask, result, limitCount); return(reader); }