Beispiel #1
0
        private List <Task> GcPages(ActivePagesByTopic activePage, List <Task> tasks)
        {
            var now = DateTime.UtcNow;

            //Garbage collect pages
            foreach (var loadedPage in _messagesContentCache.GetLoadedPages(activePage.Snapshot.TopicId))
            {
                if (activePage.Pages.Any(activePageId => loadedPage.PageId.Value == activePageId.Value))
                {
                    continue;
                }

                if (now - loadedPage.LastAccessTime < GcTimeout)
                {
                    continue;
                }

                var task = _taskSchedulerByTopic.ExecuteTaskAsync(activePage.Snapshot.TopicId, loadedPage.PageId, "GC page",
                                                                  () => GcThreadTopicSynchronizedAsync(activePage.Snapshot.TopicId, loadedPage.PageId));

                tasks ??= new List <Task>();
                tasks.Add(task);
            }


            return(tasks);
        }
Beispiel #2
0
        private List <Task> WarmUpPages(ActivePagesByTopic activePage, List <Task> tasks)
        {
            foreach (var pageId in activePage.Pages)
            {
                if (_messagesContentCache.HasPage(activePage.Snapshot.TopicId, pageId))
                {
                    continue;
                }

                var task = _taskSchedulerByTopic.ExecuteTaskAsync(activePage.Snapshot.TopicId, pageId, "Warming Up",
                                                                  () => WarmUpThreadTopicSynchronizedAsync(activePage.Snapshot.TopicId, pageId));

                tasks ??= new List <Task>();
                tasks.Add(task);
            }

            return(tasks);
        }