如何在Blazor服务器端模拟延迟?

3

我有一个Blazor服务器端应用程序,将在与我的主要用户使用的地方不太接近的服务器上托管。我想模拟一下某些功能在有一定延迟的情况下是否可用,或者延迟是否会真正影响它。

但我无法在开发过程中测试延迟,并且我不想每次想测试一些更改时就在服务器上运行构建。

我已经尝试了很多方法,例如在Chrome开发者工具中减少Internet连接速度,但这与来自远处主机的延迟不同。

如何在Blazor Server Side上模拟延迟?

2个回答

0
只需添加自定义的ASPNET中间件并配置默认传输为LongPolling:
在Startup.cs中。
    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");
            });
        }

0

在异步任务函数中,可以在获取数据或模拟所需操作之前使用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";
    }
}

1
这是不可行的,因为我需要在应用程序的每个地方都添加Task.Delay,这已经是一个糟糕的解决方案,但我仍然无法重现像这个问题这样与延迟有关的事情。 - Vencovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接