.NET Blazor 中的常见做法取消异步方法

Common practice cancel async methods in .NET Blazor

提问人:Joe Tüscher 提问时间:10/25/2023 最后编辑:Theodor ZouliasJoe Tüscher 更新时间:10/25/2023 访问量:54

问:

我们目前正在 blazor 中设置 SPA,并使用 NavManager 在页面之间导航。 假设我们有两个页面:员工和客户。 这两个页面都包含一个简单的表格,里面有数据,这些数据来自数据库。

如果用户导航到“员工”页面,应用程序将异步加载数据库中的所有数据,如下所示:

var employees = await Database.Instance.Employee.GetAllActive();

现在有相当多的工作需要完成,以获取整个员工列表,因此加载所有数据需要一些时间。

如果用户现在切换到客户页面,则在加载所有员工之前,它将加载员工,直到完成。之后,将加载客户。

因此,现在用户需要等到所有员工都加载完毕,然后才能加载客户。

现在这是我的问题: 防止这样的事情发生的最佳方法是什么? 使用 CancellationTokens?或者我们还有什么可以使用的吗?

C# .NET 多线程异 Blazor

评论

2赞 Panagiotis Kanavos 10/25/2023
最好的选择是不要加载所有员工。仅加载真正需要显示的数据。显式使用分页或滚动虚拟化以根据需要加载新行。文档中解释了导航的取消,但这只是掩盖了真正的问题。所有网格组件都以一种或另一种方式支持虚拟化,包括 Blazor 自己的 QuickGrid
0赞 Charlieface 10/25/2023
CancellationToken可以从 ASP.Net 请求一直传递到 SqlClient。请注意:您不想取消进行更改的请求,否则您将不知道它是否已提交。但是,是的,无论如何,您可能应该重新考虑您在做什么。Post
0赞 MrC aka Shaun Curtis 10/26/2023
除了上述相关注释之外,您是否正在使用 DbContextFactory?
0赞 Joe Tüscher 10/26/2023
@PanagiotisKanavos如果我只加载必要的条目,它仍然需要一些时间。所以它不能解决我的问题......
1赞 dani herrera 10/27/2023
在我看来,正确的方法是为 blazor 页面 (spa) 设置全局取消令牌并制作要实现的页面。然后,对页面上的全局页面令牌调用 cancel。请务必将此全局令牌发送到所有页面异步操作。IDisposableDispose

答: 暂无答案