将Blazor LocalStorage与事件处理配合使用会导致异常

时间:2019-12-27 22:09:36

标签: .net-core blazor blazor-server-side

我正在将Blazor服务器端与.net核心3.1和Blazored.LocalStorage 2.1.1一起使用。

为了保存我的shop应用程序购物篮的每个状态,我注册了一个OnBasketChanged事件(在BasketState类的注册服务中):

    protected override void OnAfterRender(bool firstRender)
    {
        if (firstRender)
        {
            AppState.Basket.OnBasketChanged -= new Action<BasketAnimationType>(async (e) => await UpdateBasketAtLocalStorage(e));
            AppState.Basket.OnBasketChanged += new Action<BasketAnimationType>(async (e) => await UpdateBasketAtLocalStorage(e));
        }
    }

    protected async Task UpdateBasketAtLocalStorage(BasketAnimationType animationType)
    {
        try
        {
            await LocalStorage.SetItemAsync("Basket", AppState.Basket);
            //AppState.AnimationHandler(animationType);
            //StateHasChanged();
        }
        catch (Exception ex)
        {
            My.Log.Error(ex);
        }
    }

问题是当我单击快速/多倍的时间时,行为非常缓慢(似乎使每个事件一个接一个...)

  1. 如果有新的通话要运行(老的可以直接取消,它们已经过期),我怎么可能停止运行Basket的保存。

  2. 我确实得到了这些异常(仅在某些情况下),这些异常在这里我不知道任务取消的原因。有解决或更好处理的想法吗?

以下是异常详细信息...

  

错误System.Threading.Tasks.TaskCanceledException:任务已在取消   位于PegasusV6.Pages.BasketComponentBase.UpdateBasketAtLocalStorage(BasketAnimationType animationType)的Microsoft.JSInterop.JSRuntime.InvokeWithDefaultCancellation [T](字符串标识符,Object [] args)位于Blazored.LocalStorage.LocalStorageService.SetItemAsync(字符串键,对象数据)      

错误System.Threading.Tasks.TaskCanceledException:一个任务是   取消。在   Microsoft.JSInterop.JSRuntime.InvokeWithDefaultCancellation [T](字符串   标识符,Object [] args)在   Blazored.LocalStorage.LocalStorageService.GetItemAsync [T](字符串键)   在   Blazored.LocalStorage.LocalStorageService.RaiseOnChangingAsync(String   键,对象数据)在   Blazored.LocalStorage.LocalStorageService.SetItemAsync(String key,   对象数据)位于   PegasusV6.Pages.BasketComponentBase.UpdateBasketAtLocalStorage(BasketAnimationType   animationType)

谢谢!

0 个答案:

没有答案