首页 > 解决方案 > 无法再读取 ParameterView 实例,因为它已过期。ParameterView 只能同步读取,不能存储

问题描述

重写 SetParametersAsync 时,如果我调用任何异步方法,则会得到“未处理的异常呈现组件:ParameterView 实例已过期,无法再读取。ParameterView 只能同步读取,不得存储以备后用。”

public override async Task SetParametersAsync(ParameterView parameters)
{
    await Task.Delay(1000);

    await base.SetParametersAsync(parameters);
}

我们如何安全地调用 SetParamatersAsync 中的异步方法?

标签: blazorblazor-webassembly

解决方案


我相信您正在寻找的编码模式如下所示。错误消息由渲染器生成。它传入ParameterView,跟踪它,并期望它立即(同步)被消耗。对象内的参数可能在一秒钟内就非常陈旧。

在我们parameters立即使用的模式中,将其应用于组件实例属性。然后我们可以base在闲暇时调用,传递一个空ParameterView的,因为我们已经设置了它们。

        public async override Task SetParametersAsync(ParameterView parameters)
        {
            parameters.SetParameterProperties(this);
            await Task.Delay(100);
            await base.SetParametersAsync(ParameterView.Empty);
        }
        public override Task SetParametersAsync(ParameterView parameters)
        {
            parameters.SetParameterProperties(this);
              ... Do things
            return base.SetParametersAsync(ParameterView.Empty);
        }

这是 ASPNetCore 团队似乎使用的模式。您可以在InputBase-line 190 以上的代码中看到它。


推荐阅读