我有一个Blazor服务器端应用程序,将在与我的主要用户使用的地方不太接近的服务器上托管。我想模拟一下某些功能在有一定延迟的情况下是否可用,或者延迟是否会真正影响它。
但我无法在开发过程中测试延迟,并且我不想每次想测试一些更改时就在服务器上运行构建。
我已经尝试了很多方法,例如在Chrome开发者工具中减少Internet连接速度,但这与来自远处主机的延迟不同。
如何在Blazor Server Side上模拟延迟?
我有一个Blazor服务器端应用程序,将在与我的主要用户使用的地方不太接近的服务器上托管。我想模拟一下某些功能在有一定延迟的情况下是否可用,或者延迟是否会真正影响它。
但我无法在开发过程中测试延迟,并且我不想每次想测试一些更改时就在服务器上运行构建。
我已经尝试了很多方法,例如在Chrome开发者工具中减少Internet连接速度,但这与来自远处主机的延迟不同。
如何在Blazor Server Side上模拟延迟?
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
// Simulate cloud latency ...
app.Use(async (context, next) =>
{
await Task.Delay(35);
await next.Invoke();
await Task.Delay(35);
});
app.UseEndpoints(endpoints =>
{
// Use slowest transport mode for testing
endpoints.MapBlazorHub(options =>
{
options.Transports = HttpTransportType.LongPolling;
});
endpoints.MapFallbackToPage("/_Host");
});
}
在异步任务函数中,可以在获取数据或模拟所需操作之前使用Task.Delay()方法。
下面是一个Blazor组件的例子,其在单击按钮后会从服务器加载消息(MessageFromServer属性)。而使用await Task.Delay()方法则可以添加额外的等待时间。
@MessageFromServer
<button @onclick="ElaborateDataOnServer">Load Data</button>
@code{
public string MessageFromServer { get; set; } = string.Empty;
public async Task ElaborateDataOnServer()
{
//simulate the waiting
await Task.Delay(1000);
MessageFromServer = "loaded from server";
}
}
Task.Delay
,这已经是一个糟糕的解决方案,但我仍然无法重现像这个问题这样与延迟有关的事情。 - Vencovsky