我熟悉编写高响应性的ASP.NET MVC应用程序,在该应用程序中加载初始页面数据,然后触发多个AJAX调用以加载页面的“辅助”数据。因此,在后台,这些AJAX请求几乎都同时到达了Web服务器并从我们的SQL DB中提取数据。
我设想使用Blazor应用程序执行非常类似的操作。因此,我们将向页面加载一些数据,然后将其包含多个组件,然后在页面上显示其他数据。这些组件的加载可以通过用户操作或页面上的其他事件来初始化。
那是我看到的一个问题:事件处理程序对剃刀页面上各个组件触发的事件都反应非常好,然后它们都击中了我们的DataService(注入到页面中),这随后导致大量线程达到我们的实体框架的背景。
那是不允许的-只能在任何时间调用一个线程。
要解决此问题,我可以使用SemaphoreSlip(1,1)锁定Context,以确保在任何时候仅可以访问一个线程,但是这对我来说似乎有点瓶颈。当然,锁定Context不是microsoft期望我们做的事情。...??
我在这里想念什么?
我正在使用Blazor-Server,.NET Core 3.1 / EF Core 3.1。在我的应用启动时,我正在设置EF上下文和DI服务:
services.AddDbContext<MyContext>();
services.AddScoped<MyService>();
上下文被注入到Service的构造函数中(根据microsoft的Blazor示例),服务被注入到Page中。