问题标签 [concurrentdictionary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
442 浏览

c# - 不同 ConcurrentDictionary 键上的替换操作是否共享一个锁?

替换与 ConcurrentDictionary 键关联的值是否会锁定该键之外的任何字典操作?

编辑:例如,除了第一次添加键时,我想知道任何一个线程是否会阻塞另一个线程,如下所示:

最初我认为它确实如此,因为例如dictionary[key] = value;可以引用一个尚不存在的键。但是,在工作时,我意识到如果需要添加,则可能会在单独的锁升级之后发生。

我正在起草下面的课程,但AccountCacheLock如果这个问题(上面)的答案是“否”,那么课程提供的间接性是不必要的。事实上,我自己的所有锁管理几乎都不需要。

附带问题:在 ASP.NET 框架中是否有已经这样做的东西?

0 投票
2 回答
81 浏览

vb.net - ConcCurrentDictionary 初始化

是否可以声明和初始化 ConcurrentDictionary?也许像字典这样的东西:

0 投票
2 回答
13243 浏览

c# - 如何在 ConcurrentDictionary 中设置值,无论它是否包含 Key

首先,使用索引分配(例如myConcurrentDictionary[someKey] = someValue;)简单地将项目添加到并发字典中是否安全?

我只是很困惑,因为它隐藏了 IDictionary 方法(例如Add)。

为什么 AddOrUpdate() 需要一个函数来更新值?不管键是否已经存在,是否有一种方法可以设置键的值?

我无法真正从 MSDN 页面收集到这个。

0 投票
6 回答
8851 浏览

c# - 缓存异步操作

我正在寻找一种优雅的方式来缓存异步操作的结果。

我首先有一个这样的同步方法:

然后我让它异步:

然后我决定我应该缓存结果,所以我不需要经常在外面查询:

然后我读了一篇关于缓存如何Task<T>更好的文章(或者观看了视频),因为创建它们很昂贵:

现在的问题是,如果请求失败(例如:HTTP 401),缓存将包含失败Task<String>,我将不得不重置应用程序,因为无法重新发送请求。

有没有一种优雅的方式ConcurrentDictionary<T1,T2>来只缓存成功的任务并且仍然具有原子行为?

0 投票
1 回答
317 浏览

c# - 一个并发词典中的更新反映在主词典中

我有两个并发字典说

MyTempDic包含与 .I 相同的数据MainDic。我在 .I 上进行计算TempDic。所做的任何更改TempDic都会反映在MainDic. 我该如何阻止这种情况,我需要保持MainDic原样以供进一步参考

以下是我的实际代码:

ConcurrentDictionary NetPositionData = new ConcurrentDictionary(); // 主目录

在这里,如果标志是 A,我将返回数据,否则我调用 GetDayPosition。在 GetDayPosition 函数中,我在 _DayPos 中所做的任何更新也会反映在 NetPositionData 字典中。因此,我丢失了原始数据。我不希望这发生

0 投票
2 回答
376 浏览

c# - 为什么我需要从 ConcurrentDictionary 转换为 IDictionary 才能使用 Add()?

如果我有一个ConcurrentDictionary并且想要使用该Add()功能,我需要转换为IDictionary

问题ConcurrentDictionary 和 IDictionary告诉我这是因为使用私有方法显式ConcurrentDictionary实现。IDictionary

我的问题:为什么ConcurrentDictionary这样实施?隐藏已实现接口的使用有什么好处?

0 投票
3 回答
632 浏览

c# - ConcurrentDictionary 的 GetOrAdd 不是原子的。除了锁定还有其他选择吗?

我正在使用并发字典来保存打开的文件。

要打开一个新文件,我这样做:

有了这个,我经常得到以下异常:

对我来说,这意味着该操作不是原子的,并且该软件试图两次打开同一个文件。

有没有其他我可以使用的操作,这将是原子的?出于性能考虑,我想避免锁定。

0 投票
3 回答
1577 浏览

c# - 实现通用 ToConcurrentDictionary 扩展方法

我试图向我的应用程序添加一些类型安全的字典逻辑,并试图四处寻找将给定字典转换为并发字典的实现。在没有运气的情况下搜索了一段时间后,我最终用一些破解的代码实现了我自己的版本。以下是我想出的版本:

使用方法如下:

有什么建议可以改进这种方法或任何更好的替代方法来达到相同的结果?

0 投票
2 回答
1378 浏览

c# - 如何在 Parallel.ForEach 期间添加或更新此 .NET 集合?

我有一个文件列表,其中每个文件都包含一个Foo数据列表。现在,同一段 Foo 数据(例如Id = 1)可能存在于多个文件中,但最近的一段数据会覆盖现有的。

我只是将每条数据读入内存集合中。

当我阅读文件时(因为有几个 em),我也在使用Parallel.ForEach(files, file => { .. });

我不确定我是怎么做到的。

我正在考虑使用 aConcurrentDictionary但我不确定如何AddOrUpdate使用where子句来做事。

有什么建议么?

0 投票
1 回答
1685 浏览

c# - 使用 long (int64) 作为 hashCode 并且仍然使用 IEqualityComparer 进行并发 Dictionary

我在并发字典中使用自制的 IEqualityComparer 和 GetHashCode 时遇到问题。

当我像这样实现它时,下面的类(使用两个属性进行了简化)完美地工作:

.

现在我做了几乎相同的类,但不是普通的IEqualityComparer接口,而是做了一点改动,这样我就可以生成long / int64 hascodes(因为当类持有越来越多的属性时,我们会遇到多个具有相同hashcode的值)

所以我想减少获得相同hascode的变化。因此,我想使用更大的数字,如果可能的话,乘以 10000 来获得一些小数。

因此我创建了这个界面:

并更改了属性类,使其看起来像这样:

GetHashCode 工作正常。到目前为止没有问题。

但是......当我尝试像这样将 IEqualityComparer 添加到并发字典时:

我收到此错误:

错误 3 参数 1:无法从 'HasCodeTestForUniqueResult.TwoUintsKeyInfoInt64.EqualityComparerOneUintAndTwoStringKeyInfo' 转换为 'System.Collections.Generic.IEqualityComparer' D:\Users\mldz\Documents\visual studio 2012\HashCodeTestForUniqueResult\HashCodeTestForUniqueResult\Form1.cs 109 140 HashCodeTestForUniqueResult

我了解默认 System.Collections.Generic.IEqualityComparer 的 int 类型与我自己的 GetHashCode 生成器的 long / int64 结果之间存在冲突。但是有没有办法解决这个问题并能够使用长哈希码?

亲切的问候,

马蒂斯

PS上面的代码只是为了测试它并复制问题。