public void EndEditSession() { // first, publish null session: var session = Interlocked.Exchange(ref _editSession, null); Contract.ThrowIfNull(session, "Edit session has not started."); // then cancel all ongoing work bound to the session: session.Cancel(); // then clear all reported rude edits: _diagnosticService.Reanalyze(_workspace, documentIds: session.GetDocumentsWithReportedDiagnostics()); _debuggingSessionTelemetry.LogEditSession(_editSessionTelemetry.GetDataAndClear()); session.Dispose(); }