Exemplo n.º 1
0
 private CancellationToken CreateCancellationToken()
 {
     if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested)
     {
         cancellationTokenSource = new PausableCancellationTokenSource();
         cancellationTokenSource.Token.Register(() => IsExecuting = false);
     }
     return(cancellationTokenSource.Token);
 }
Exemplo n.º 2
0
        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);
            }
        }