Пример #1
0
        public async Task Execute()
        {
            TransferModel.HasImportStarted = true;

            ImportOperationContext operationContext = null;
            Exception criticalError = null;

            try
            {
                using (var cancellation = TransferModel.ImportCancellation = new CancellationTokenSource())
                {
                    var statistics = await statisticsFactory.Create(errorDetailsProviderFactory.Create(TransferModel.InfrastructureConfiguration),
                                                                    TransferModel.InfrastructureConfiguration, cancellation.Token);

                    UpdateStatistics(
                        operationContext = new ImportOperationContext(statistics, Presenter.DataContext as ImportViewModel)
                    {
                        ViewModel = { IsImportRunning = true }
                    });

                    using (new DisposableDispatcherTimer <ImportOperationContext>(
                               TimeSpan.FromSeconds(1), UpdateStatistics, operationContext))
                    {
                        await Task.Run(() =>
                                       transferService.TransferAsync(
                                           // From
                                           TransferModel.SourceAdapterName, TransferModel.SourceConfiguration,
                                           // To
                                           TransferModel.SinkAdapterName, TransferModel.SinkConfiguration,
                                           // With statistics
                                           statistics,
                                           // Allow cancellation
                                           cancellation.Token));
                    }
                }
            }
            catch (Exception error)
            {
                // Preserve error and allow finally block to execute right away
                criticalError = error;
            }
            finally
            {
                TransferModel.ImportCancellation = null;

                if (operationContext != null)
                {
                    operationContext.ViewModel.IsImportRunning = false;
                    UpdateStatistics(operationContext);
                }
            }

            taskBarService.Notify();

            if (criticalError != null)
            {
                errorHandler.Handle(criticalError);
            }
        }
Пример #2
0
        private void UpdateStatistics(ImportOperationContext context)
        {
            var snapshot = context.Statistics.GetSnapshot();

            context.ViewModel.ElapsedTime = snapshot.ElapsedTime;
            context.ViewModel.Transferred = snapshot.Transferred;
            context.ViewModel.Failed      = snapshot.Failed;
            context.ViewModel.Errors      = snapshot.GetErrors();
        }
        public async Task Execute()
        {
            TransferModel.HasImportStarted = true;

            ImportOperationContext operationContext = null;
            Exception criticalError = null;
            try
            {
                using (var cancellation = TransferModel.ImportCancellation = new CancellationTokenSource())
                {
                    var statistics = await statisticsFactory.Create(TransferModel.InfrastructureConfiguration, cancellation.Token);
                    UpdateStatistics(
                        operationContext = new ImportOperationContext(statistics, Presenter.DataContext as ImportViewModel)
                        {
                            ViewModel = { IsImportRunning = true }
                        });
                
                    using (new DisposableDispatcherTimer<ImportOperationContext>(
                        TimeSpan.FromSeconds(1), UpdateStatistics, operationContext))
                    {
                        await Task.Run(() =>
                            transferService.TransferAsync(
                            // From
                                TransferModel.SourceAdapterName, TransferModel.SourceConfiguration,
                            // To
                                TransferModel.SinkAdapterName, TransferModel.SinkConfiguration,
                            // With statistics
                                statistics,
                            // Allow cancellation
                                cancellation.Token));
                    }
                }
            }
            catch (Exception error)
            {
                // Preserve error and allow finally block to execute right away
                criticalError = error;
            }
            finally
            {
                TransferModel.ImportCancellation = null;

                if (operationContext != null)
                {
                    operationContext.ViewModel.IsImportRunning = false;
                    UpdateStatistics(operationContext);
                }
            }

            if (criticalError != null)
                errorHandler.Handle(criticalError);
        }
        public async Task Execute()
        {
            TransferModel.HasImportStarted = true;

            ImportOperationContext operationContext = null;
            Exception criticalError = null;

            try
            {
                var statistics = statisticsFactory.Create();
                operationContext = new ImportOperationContext(statistics, Presenter.DataContext as ImportViewModel);
                operationContext.ViewModel.IsImportRunning = true;

                using (var cancellation = TransferModel.ImportCancellation = new CancellationTokenSource())
                {
                    using (var timer = new Timer(UpdateStatistics, operationContext, TimeSpan.Zero, TimeSpan.FromSeconds(1)))
                    {
                        await Task.Run(() =>
                                       transferService.TransferAsync(
                                           // From
                                           TransferModel.SourceAdapterName, TransferModel.SourceConfiguration,
                                           // To
                                           TransferModel.SinkAdapterName, TransferModel.SinkConfiguration,
                                           // With statistics
                                           statistics,
                                           // Allow cancellation
                                           cancellation.Token));
                    }
                }
            }
            catch (Exception error)
            {
                // Preserve error and allow finally block to execute right away
                criticalError = error;
            }
            finally
            {
                TransferModel.ImportCancellation = null;

                if (operationContext != null)
                {
                    operationContext.ViewModel.IsImportRunning = false;
                    UpdateStatistics(operationContext);
                }
            }

            if (criticalError != null)
            {
                errorHandler.Handle(criticalError);
            }
        }
        private void UpdateStatistics(ImportOperationContext context)
        {
            var snapshot = context.Statistics.GetSnapshot();

            context.ViewModel.ElapsedTime = snapshot.ElapsedTime;
            context.ViewModel.Transferred = snapshot.Transferred;
            context.ViewModel.Failed = snapshot.Failed;
            context.ViewModel.Errors = snapshot.GetErrors();
        }