public Task OpenProjectForWriteAsync(ConfiguredProject project, Action <Project> action, ProjectCheckoutOption option, CancellationToken cancellationToken = default)
            {
                action(_evaluationProject);

                return(Task.CompletedTask);
            }
Beispiel #2
0
        public async Task OpenProjectForWriteAsync(ConfiguredProject project, Action <Project> action, ProjectCheckoutOption option = ProjectCheckoutOption.Checkout, CancellationToken cancellationToken = default)
        {
            Requires.NotNull(project, nameof(project));
            Requires.NotNull(project, nameof(action));

            await _projectLockService.WriteLockAsync(async access =>
            {
                if (option == ProjectCheckoutOption.Checkout)
                {
                    await access.CheckoutAsync(project.UnconfiguredProject.FullPath);
                }

                Project evaluatedProject = await access.GetProjectAsync(project, cancellationToken);

                // Deliberately not async to reduce the type of
                // code you can run while holding the lock.
                action(evaluatedProject);

                // Avoid blocking thread on Dispose
                await access.ReleaseAsync();
            }, cancellationToken);
        }