diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/LanguageServices/Workspace.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/LanguageServices/Workspace.cs
index 10f68a3a7d4..d35b874a75d 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/LanguageServices/Workspace.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/LanguageServices/Workspace.cs
@@ -166,8 +166,11 @@ public void ChainDisposal(IDisposable disposable)
/// A task that completes when the update has been integrated.
internal async Task OnWorkspaceUpdateAsync(IProjectVersionedValue update)
{
- Verify.NotDisposed(this);
-
+ if (IsDisposed || IsDisposing)
+ {
+ return;
+ }
+
await InitializeAsync(_unloadCancellationToken);
Assumes.True(_state is WorkspaceState.Uninitialized or WorkspaceState.Initialized);
diff --git a/tests/Microsoft.VisualStudio.ProjectSystem.Managed.VS.UnitTests/ProjectSystem/VS/LanguageServices/WorkspaceTests.cs b/tests/Microsoft.VisualStudio.ProjectSystem.Managed.VS.UnitTests/ProjectSystem/VS/LanguageServices/WorkspaceTests.cs
index 7fb1a421313..21db844cdfe 100644
--- a/tests/Microsoft.VisualStudio.ProjectSystem.Managed.VS.UnitTests/ProjectSystem/VS/LanguageServices/WorkspaceTests.cs
+++ b/tests/Microsoft.VisualStudio.ProjectSystem.Managed.VS.UnitTests/ProjectSystem/VS/LanguageServices/WorkspaceTests.cs
@@ -85,11 +85,21 @@ public async Task Dispose_TriggersObjectDisposedExceptionsOnPublicMembers()
await Assert.ThrowsAsync(() => workspace.WriteAsync(w => Task.CompletedTask, CancellationToken.None));
await Assert.ThrowsAsync(() => workspace.WriteAsync(w => TaskResult.EmptyString, CancellationToken.None));
- await Assert.ThrowsAsync(() => workspace.OnWorkspaceUpdateAsync(null!));
+ //await Assert.ThrowsAsync(() => workspace.OnWorkspaceUpdateAsync(null!));
Assert.Throws(() => workspace.ChainDisposal(null!));
}
+ [Fact]
+ public async Task Dispose_DoesNotTriggerObjectDisposedExceptionsOnUpdate()
+ {
+ var workspace = await CreateInstanceAsync();
+
+ await workspace.DisposeAsync();
+
+ await workspace.OnWorkspaceUpdateAsync(null!);
+ }
+
[Theory]
[CombinatorialData]
public async Task WriteAsync_ThrowsIfNullAction(bool isGeneric)