private async Task OnProjectChangedAsync( IProjectSubscriptionUpdate projectUpdate, IProjectCatalogSnapshot catalogSnapshot, IProjectCapabilitiesSnapshot capabilities, ConfiguredProject configuredProject, RuleHandlerType handlerType) { if (IsDisposing || IsDisposed) { return; } // Ensure updates don't overlap and that we aren't disposed during the update without cleaning up properly await ExecuteUnderLockAsync(async token => { // Ensure the project doesn't unload during the update await _tasksService.LoadedProjectAsync(async() => { // TODO pass _tasksService.UnloadCancellationToken into handler to reduce redundant work on unload // Ensure the project's capabilities don't change during the update using (ProjectCapabilitiesContext.CreateIsolatedContext(configuredProject, capabilities)) { await HandleAsync(projectUpdate, catalogSnapshot, handlerType); } }); }); }
private async Task OnProjectChangedAsync( IProjectSubscriptionUpdate projectUpdate, IProjectCatalogSnapshot catalogSnapshot, IProjectCapabilitiesSnapshot capabilities, ConfiguredProject configuredProject, RuleHandlerType handlerType) { if (IsDisposing || IsDisposed) { return; } await _tasksService.LoadedProjectAsync(async() => { if (_tasksService.UnloadCancellationToken.IsCancellationRequested) { return; } using (ProjectCapabilitiesContext.CreateIsolatedContext(configuredProject, capabilities)) { await HandleAsync(projectUpdate, catalogSnapshot, handlerType); } }); }
private void ProjectPropertyChanged(Tuple<ImmutableList<IProjectValueVersions>, TIdentityDictionary> sources) { var capabilitiesSnapshot = sources.Item1[0] as IProjectVersionedValue<IProjectCapabilitiesSnapshot>; using (ProjectCapabilitiesContext.CreateIsolatedContext(_projectVsServices.Project, capabilitiesSnapshot.Value)) { NominateProject(sources.Item1.RemoveAt(0)); } }
protected async Task ProjectRuleBlock_ChangedAsync(IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCapabilitiesSnapshot> > projectSnapshot) { if (projectSnapshot.Value.Item1.CurrentState.TryGetValue(ProjectDebugger.SchemaName, out IProjectRuleSnapshot ruleSnapshot)) { ruleSnapshot.Properties.TryGetValue(ProjectDebugger.ActiveDebugProfileProperty, out string activeProfile); ILaunchSettings snapshot = CurrentSnapshot; if (snapshot == null || !LaunchProfile.IsSameProfileName(activeProfile, snapshot.ActiveProfile?.Name)) { // Updates need to be sequenced await _sequentialTaskQueue.ExecuteTask(async() => { using (ProjectCapabilitiesContext.CreateIsolatedContext(_commonProjectServices.Project, projectSnapshot.Value.Item2)) { await UpdateActiveProfileInSnapshotAsync(activeProfile); } }); } } }
private async Task OnProjectChangedAsync( IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > e, ConfiguredProject configuredProject, RuleHandlerType handlerType) { if (IsDisposing || IsDisposed) { return; } await _tasksService.LoadedProjectAsync(async() => { if (_tasksService.UnloadCancellationToken.IsCancellationRequested) { return; } using (ProjectCapabilitiesContext.CreateIsolatedContext(configuredProject, e.Value.Item3)) { await HandleAsync(e, handlerType).ConfigureAwait(false); } }); }