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);
            }
        }