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