public void ResetPages() { //abort all async tasks _asyncPool.Clear(); _pageMaxNumber = this.RowCount / _pageSize; lock (_cache) { for (int i = 0; i < _cache.Length; i++) { _cache[i] = new Page(_pageMaxNumber * 3 + 1); } _currentTwoPagesPool[0] = new NI(_pageMaxNumber * 3 + 1, 0); _currentTwoPagesPool[1] = new NI(_pageMaxNumber * 3 + 2, 0); } _id = Guid.NewGuid(); }
private void RenewCurrentPool(int needPageNumber) { //aborting old tasks _asyncPool.Abort(i => Math.Abs(i - needPageNumber) > _cacheDeep + 1); //wait need page async load end while (_asyncPool.Exists(needPageNumber)) { Thread.Sleep(100); } lock (_cache) { int index = FindIndex(needPageNumber); if (index < 0) { //sync load LoadPage(needPageNumber); index = FindIndex(needPageNumber); if (index < 0) { throw new Exception("sync load"); } } int indexOnRemove = 0; if (Math.Abs(_currentTwoPagesPool[0].N - needPageNumber) < Math.Abs(_currentTwoPagesPool[1].N - needPageNumber)) { indexOnRemove = 1; } _currentTwoPagesPool[indexOnRemove] = new NI(needPageNumber, index); } for (int i = 1; i <= _cacheDeep; i++) { //async load needPageNumber + i AsyncLoadPage(needPageNumber + i); //async load needPageNumber - i AsyncLoadPage(needPageNumber - i); } }
private void RenewCurrentPool(int needPageNumber) { //aborting old tasks _asyncPool.Abort(i => Math.Abs(i - needPageNumber) > _cacheDeep + 1); //wait need page async load end while (_asyncPool.Exists(needPageNumber)) { Thread.Sleep(100); } lock (_cache) { int index = FindIndex(needPageNumber); if (index < 0) { //sync load LoadPage(needPageNumber); index = FindIndex(needPageNumber); if (index < 0) throw new Exception("sync load"); } int indexOnRemove = 0; if (Math.Abs(_currentTwoPagesPool[0].N - needPageNumber) < Math.Abs(_currentTwoPagesPool[1].N - needPageNumber)) indexOnRemove = 1; _currentTwoPagesPool[indexOnRemove] = new NI(needPageNumber, index); } for (int i = 1; i <= _cacheDeep; i++) { //async load needPageNumber + i AsyncLoadPage(needPageNumber + i); //async load needPageNumber - i AsyncLoadPage(needPageNumber - i); } }