diff --git a/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs b/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs index c92a585bd6..77544baa77 100644 --- a/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs +++ b/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Globalization; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.Components.Rendering @@ -763,5 +764,34 @@ namespace Microsoft.AspNetCore.Components.Rendering Assert.Equal(TaskStatus.Canceled, task.Status); await Assert.ThrowsAsync(async () => await task); } + + [Fact] + [QuarantinedTest] + public async Task InvokeAsync_SyncWorkInAsyncTaskIsCompletedFirst() + { + // Simplified version of ServerComponentRenderingTest.CanDispatchAsyncWorkToSyncContext + var expected = "First Second Third Fourth Fifth"; + var context = new RendererSynchronizationContext(); + string actual; + + // Act + await Task.Yield(); + actual = "First"; + + var invokeTask = context.InvokeAsync(async () => + { + // When the sync context is idle, queued work items start synchronously + actual += " Second"; + await Task.Delay(250); + actual += " Fourth"; + }); + + actual += " Third"; + await invokeTask; + actual += " Fifth"; + + // Assert + Assert.Equal(expected, actual); + } } }