首页 > 解决方案 > 从 Blazor 客户端中长时间运行的后台任务中释放 UI 的推荐方法是什么

问题描述

我们的 Blazor(客户端)应用程序由同时存在于 UI 上的许多组件组成。其中之一必须对 Azure SQL 进行大量大数据调用。无论它是否具有 UI 焦点,该组件都会执行这些调用。这些调用中的每一个可能需要最多 3 秒才能返回其结果,在此期间它会呈现 UI 无响应。在不使用 Blazor 服务器端的情况下,我们如何在这些调用期间保持 UI 响应。使用 Task.Run 等对单线程架构没有帮助。使用加载微调器也不是一个选项,因为这仍然会使 UI 无响应并且可能对用户不可见。在当前的 Blazor 0.9.0 中有什么方法可以实现这个目标吗?

运行最新的 Blazor 预览版 (0.9.0-preview3-19154-02)

标签: azureblazor

解决方案


您可以使用Invoke, 我修改counter了示例页面来说明它,您将需要一种单例 DI 对象以避免运行该进程两次。

记住Blazor是一个实验项目。此外,这个答案也是一种实验方法。

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>

@functions {
    int currentCount = 0;

    void IncrementCount()
    {
        currentCount++;
    }

    protected  override void OnInit()
    {
        Invoke(
            //here your task.
            async () =>
            {
                for(var i =0; i< 50; i++)
                {
                    await Task.Delay(1000);
                    currentCount++;
                    StateHasChanged();                    
                    System.Console.WriteLine("Still running ...");
                }
            });
    }
}

推荐阅读