无法再读取 ParameterView 实例,因为它已过期。 ParameterView只能同步读取,不得存储

The ParameterView instance can no longer be read because it has expired. ParameterView can only be read synchronously and must not be stored for

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

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

    await base.SetParametersAsync(parameters);
}

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

我相信您正在寻找的编码模式如下所示。错误消息由渲染器生成。它传入 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 onwards.

的代码中看到它