Blazorred-async getters/ssetters:如何在定时器循环中获取会话变量



我在计时器循环中获取/调用异步getter函数时遇到问题。。我试图在一个方法中调用相关的行,它被接受/没有语法错误,但当我在定时器环境中编写它时,我就得到了一个错误。详情如下:

  1. 在我的select回调函数中,我使用Blazorred库设置了一个会话变量:

    await myLocalStore.SetItemAsync("ActiveChannel", i_active_channel);

  2. 在后台,有一个autorefresh函数正在运行,它应该在一个无休止的定时器循环中不断刷新我的会话变量:

    Globals.timerCameras = new Timer(new TimerCallback(_ =>
    {
    //here, i want to get my session variable / updates of my session variable every 
    // 500ms
    //WRONG SYNTAX: 
    my_active_measurement_channel = await myLocalStore.GetItemAsync<string>("ActiveChannel");
    }), null, 1000, 500);
    
  3. 我收到以下错误消息:

"await"运算符只能在异步lambda表达式中使用。请考虑使用"async"-修饰符标记此lambda表达式

我还尝试用不同的语法调用该方法,比如使用";任务运行"-写作风格,但";GetItemAsync";来自类型";ValueTask;并且ValueTask不继承函数";运行";因此,这种方式不起作用,现在我只是随意尝试,我并不真正理解编写通常的getter行的潜在问题:

my_active_measurement_channel = await myLocalStore.GetItemAsync<string>("ActiveChannel");

如果有人能帮我理解这个问题,那真的很酷,我现在很困惑。

谢谢!

我不确定这是最好的解决方案,但您只需将async添加到TimerCallback lambda:即可使用await

Globals.timerCameras = new Timer(new TimerCallback(async _ =>
{
my_active_measurement_channel = await myLocalStore.GetItemAsync<string>("ActiveChannel");
}), null, 1000, 500);

最新更新