@@ -46,6 +46,21 @@ public EndpointHtmlRendererTest()
4646 renderer = GetEndpointHtmlRenderer ( ) ;
4747 }
4848
49+ [ Fact ]
50+ public async Task DoesNotRenderChildAfterRendererStopped ( )
51+ {
52+ renderer . SignalRendererToFinishRendering ( ) ;
53+
54+ var httpContext = GetHttpContext ( ) ;
55+ var writer = new StringWriter ( ) ;
56+
57+ var result = await renderer . PrerenderComponentAsync ( httpContext , typeof ( SimpleComponent ) , null , ParameterView . Empty ) ;
58+ await renderer . Dispatcher . InvokeAsync ( ( ) => result . WriteTo ( writer , HtmlEncoder . Default ) ) ;
59+ var content = writer . ToString ( ) ;
60+
61+ Assert . DoesNotContain ( "Hello from SimpleComponent" , content ) ;
62+ }
63+
4964 [ Fact ]
5065 public async Task CanRender_ParameterlessComponent_ClientMode ( )
5166 {
@@ -1756,6 +1771,7 @@ private TestEndpointHtmlRenderer GetEndpointHtmlRenderer(IServiceProvider servic
17561771
17571772 private class TestEndpointHtmlRenderer : EndpointHtmlRenderer
17581773 {
1774+ private bool _rendererIsStopped = false ;
17591775 public TestEndpointHtmlRenderer ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory ) : base ( serviceProvider , loggerFactory )
17601776 {
17611777 }
@@ -1764,6 +1780,20 @@ internal int TestAssignRootComponentId(IComponent component)
17641780 {
17651781 return base . AssignRootComponentId ( component ) ;
17661782 }
1783+ public void SignalRendererToFinishRendering ( )
1784+ {
1785+ // sets a deferred stop on the renderer, which will have an effect after the current batch is completed
1786+ _rendererIsStopped = true ;
1787+ }
1788+
1789+ protected override void ProcessPendingRender ( )
1790+ {
1791+ if ( _rendererIsStopped )
1792+ {
1793+ return ;
1794+ }
1795+ base . ProcessPendingRender ( ) ;
1796+ }
17671797 }
17681798
17691799 private HttpContext GetHttpContext ( HttpContext context = null )
0 commit comments