当重写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的代码中看到它—从第190行开始。