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