private async Task <FetchRowsResult> FetchRows(int page, CancellationToken cancellationToken) { try { CancellationToken linkedToken = BackgroundOperation.Register(this, cancellationToken); if (page == 1) { await Task.Delay(500); } List <T> result = await RunAsync(() => FetchPage.Invoke(page, linkedToken)); PageCount = result.Capacity; PageSource.UpdateSummaries(); return(new FetchRowsResult(result.Cast <object>().ToArray())); } catch (TaskCanceledException) { return(new FetchRowsResult(new object[] { })); } finally { BackgroundOperation.UnRegister(this); } }