public async Task <T> OpenContextForWriteAsync <T>(Func <IWorkspaceProjectContextAccessor, Task <T> > action)
        {
            Requires.NotNull(action, nameof(action));

            WorkspaceProjectContextHostInstance instance = await WaitForLoadedAsync();

            // Throws ActiveProjectConfigurationChangedException if 'instance' is Disposed
            return(await instance.OpenContextForWriteAsync(action));
        }
示例#2
0
        public async Task <T> OpenContextForWriteAsync <T>(Func <IWorkspaceProjectContextAccessor, Task <T> > action)
        {
            Requires.NotNull(action, nameof(action));

#pragma warning disable IDE0067 // Does not own liftime
            WorkspaceProjectContextHostInstance instance = await WaitForLoadedAsync();

#pragma warning restore IDE0067

            // Throws ActiveProjectConfigurationChangedException if 'instance' is Disposed
            return(await instance.OpenContextForWriteAsync(action));
        }
示例#3
0
        [InlineData(false)]     // Project Build
        public async Task OnProjectChangedAsync_WhenInstanceDisposed_TriggersCancellation(bool evaluation)
        {
            WorkspaceProjectContextHostInstance instance = null;

            void applyChanges(IProjectVersionedValue <IProjectSubscriptionUpdate> _, bool __, CancellationToken cancellationToken)
            {
                // Dispose the instance underneath us
                instance.Dispose();

                cancellationToken.ThrowIfCancellationRequested();
            }

            var applyChangesToWorkspaceContext = evaluation ? IApplyChangesToWorkspaceContextFactory.ImplementApplyProjectEvaluationAsync(applyChanges) : IApplyChangesToWorkspaceContextFactory.ImplementApplyProjectBuildAsync(applyChanges);

            instance = await CreateInitializedInstanceAsync(applyChangesToWorkspaceContext : applyChangesToWorkspaceContext);

            var update = IProjectVersionedValueFactory.CreateEmpty();
            await Assert.ThrowsAsync <OperationCanceledException>(() =>
            {
                return(instance.OnProjectChangedAsync(update, evaluation));
            });
        }