private async Task ExportNextBatch(IDataExportContext exportContext, ExportResultInfo exportResultInfo, CancellationToken cancellationToken)
        {
            Task <IReadOnlyList <object[]> > innerTask = null;
            var batchSize = ConfigurationProvider.Configuration.ResultGrid.FetchRowsBatchSize - exportContext.CurrentRowIndex % ConfigurationProvider.Configuration.ResultGrid.FetchRowsBatchSize;
            var exception = await App.SafeActionAsync(() => innerTask = _outputViewer.ConnectionAdapter.FetchRecordsAsync(exportResultInfo.ResultInfo, (int)batchSize, cancellationToken));

            if (exception != null)
            {
                var errorMessage = Messages.GetExceptionErrorMessage(exception);
                _outputViewer.AddExecutionLog(DateTime.Now, $"Row retrieval failed: {errorMessage}");
                Messages.ShowError(errorMessage);
            }
            else
            {
                try
                {
                    await exportContext.AppendRowsAsync(innerTask.Result);
                }
                catch (OperationCanceledException)
                {
                    TraceLog.WriteLine("User has canceled export operation. ");
                    return;
                }
                finally
                {
                    exportResultInfo.RowCount = exportContext.CurrentRowIndex;
                    exportResultInfo.RefreshFileSize();
                }

                await _outputViewer.UpdateExecutionStatisticsIfEnabled();
            }
        }