我正在将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);
}
}
问题是当我单击快速/多倍的时间时,行为非常缓慢(似乎使每个事件一个接一个...)
如果有新的通话要运行(老的可以直接取消,它们已经过期),我怎么可能停止运行Basket的保存。
我确实得到了这些异常(仅在某些情况下),这些异常在这里我不知道任务取消的原因。有解决或更好处理的想法吗?
以下是异常详细信息...
错误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)
谢谢!