private CancellationToken CreateCancellationToken() { if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested) { cancellationTokenSource = new PausableCancellationTokenSource(); cancellationTokenSource.Token.Register(() => IsExecuting = false); } return(cancellationTokenSource.Token); }
public async Task ExecuteAsync(IEnumerable <ISolutionProjectModel> solutionProjects, IServiceSettings settings, CancellationToken globalCancellationToken) { var solutionProjectModels = solutionProjects as ISolutionProjectModel[] ?? solutionProjects.ToArray(); cancelledSolutions = new ConcurrentBag <ISolutionProjectModel>(); ServiceCancellationTokenSource = PausableCancellationTokenSource.CreateLinkedTokenSource(globalCancellationToken); ServiceCancellationTokenSource?.Token.Register(() => solutionProjectModels.SetOperations(Operations.Cancelling)); ServiceCancellationTokenSource?.Token.RegisterPaused((t, paused) => solutionProjectModels.OfType <ProjectViewModel>().Apply(model => model.SetPaused(paused))); await globalCancellationToken.WaitWhenPaused(); if (!IsCancelled(solutionProjectModels, globalCancellationToken)) { await ExecuteCoreAsync(solutionProjectModels, settings, ServiceCancellationTokenSource.Token); } }