小编uni*_*orn的帖子

notification.requestPermission() 未请求权限

在此输入图像描述

浏览器不断放弃请求通知权限,只是决定将其设置为默认。我怎样才能得到它的许可,这样我才能真正接受?

javascript permissions events notifications firefox-addon

10
推荐指数
1
解决办法
3万
查看次数

从异步函数中的列表中删除项目

我正在编写一个函数,通过在列表中保留订阅 ID 列表来删除所有订阅。

我遇到了问题

     foreach (var subscriptionId in _listOfSubscriptionIds)
     {
           await _hubProxy.Invoke("removeSubscription", subscriptionId);
           _listOfSubscriptionIds.Remove(subscriptionId);
     }
Run Code Online (Sandbox Code Playgroud)

因为在 foreach 循环中修改列表会引发错误。我在这个社区上发现我可以这样做,foreach(var subscriptions in _listOfSubscriptionIds.ToList())但这在空间复杂性方面听起来很糟糕,特别是如果有大约 10000000 订阅者。

所以我将其更改为以下内容:

    public async Task RemoveSubscription (string subscriptionId)
    {
        await _hubProxy.Invoke("removeSubscription", subscriptionId);
        _listOfSubscriptionIds.Remove(subscriptionId);
    }
    public void RemoveAllSubscriptions()
    {
        _listOfSubscriptionIds.ForEach(async subscriptionId => await RemoveSubscription(subscriptionId));
    }
Run Code Online (Sandbox Code Playgroud)

一些问题:

  1. 我认为第二个在空间和时间复杂度方面更好,但我是对的吗?

  2. 在第二种情况下是否存在我可能遗漏的竞争条件?

  3. 在RemoveSubscription中,_listOfSubscriptionIds.Remove(subscriptionId)也等待,因为它在异步函数中......?

编辑:我没有分享的一个导致调用_listOfSubscriptionIds.Clear()或迭代出现_listOfSubscriptionIds问题的细节是,可能有多个客户端_hubProxy,每个客户端都有其独特的订阅集。

客户端 1 的 subscriptionIds {a, b, c, d, e}

具有 subIds {f, g, h, I, j, k} 的客户端 2 …

c# linq lambda runtime race-condition

2
推荐指数
1
解决办法
2392
查看次数