据我从 Microsoft 了解到,流式渲染允许需要执行长时间运行请求的页面通过 HTML 的初始有效负载快速加载,一旦长时间运行的调用完成,剩余的 HTML 就会流式传输到浏览器并无缝修补到客户端上现有的 DOM。
我正在使用 dotnet 8 的默认模板
Blazor Web App
,正如微软所做的那样,他们为 OnInitializedAsync
组件的 Weather
方法添加了延迟。
await Task.Delay(10000);
当我将延迟增加到 10000 毫秒时..页面仍会显示
Loading...
并且仍然处于活动状态而不冻结。
问题
我们到了让我困惑的地步,我没有增加任务延迟,而是尝试通过增加天气记录的数量来获取 30000 条天气记录:
Enumerable.Range(1, 30000)
在这种情况下,页面在获取记录时冻结。即使在
Weather
组件顶部具有流式渲染属性
@attribute [StreamRendering]
请问我遇到了什么问题或误解?
提前致谢
在这种情况下,页面在获取记录时冻结。即使具有流式渲染属性
是的,因为增加记录数会增加 CPU 负载,而且这不是异步的。
您将必须使用额外的线程(使用 Task.Run() )。
forecasts = await Task.Run( () => { Enumerable.Range(1, 30000). ... });