草庐IT

concurrentdictionary

全部标签

c# - 关于使用 ConcurrentDictionary 的一些问题

我目前正在编写C#应用程序。我刚开始使用ConcurrentDictionary,所以对它的线程安全有一些疑问。首先,这是我的字典://////Adictionaryofallthetasksscheduled///privateConcurrentDictionarytasks;我在我的类中实例化它并使用它来跟踪我实现ITask的所有对象。我想确保我的设置能在多线程环境中正常工作。如果多个线程要获取ConcurrentDictionary中的item个数,需要加锁吗?如果我想从字典中获取一个特定的键,获取该键的对象并调用它的方法,我需要锁定它吗?例如://////Runsaspeci

c# - .NET 的 ConcurrentDictionary 的哪些成员是线程安全的?

System.Collections.Concurrent.ConcurrentDictionary的MSDN文档说:ThreadSafetyAllpublicandprotectedmembersofConcurrentDictionaryarethread-safeandmaybeusedconcurrentlyfrommultiplethreads.However,membersaccessedthroughoneoftheinterfacestheConcurrentDictionaryimplements,includingextensionmethods,arenotgua

c# - ConcurrentDictionary 对象 - 通过不同的线程读写

我想在我的应用程序中使用ConcurrentDictionary,但首先我需要确保我正确理解它的工作原理。在我的应用程序中,我将有一个或多个线程写入字典或从字典中删除。而且,我会有一个或多个线程从字典中读取。可能同时发生。我是否正确认为ConcurrentDictionary的实现会处理所有必需的锁定,而我不需要提供自己的锁定?换句话说,如果一个线程正在对字典进行写入或删除操作,那么读取线程(或另一个写入线程)将被阻塞,直到更新或删除完成为止?非常感谢。 最佳答案 当前的实现混合使用了strip锁(我昨天在https://stack

c# - .NET ConcurrentDictionary.ToArray() 参数异常

有时,当我调用ConcurrentDictionary.ToArray时,会出现以下错误。错误如下:System.ArgumentException:Theindexisequaltoorgreaterthanthelengthofthearray,orthenumberofelementsinthedictionaryisgreaterthantheavailablespacefromindextotheendofthedestinationarray.atSystem.Collections.Concurrent.ConcurrentDictionary2.System.Colle

c# - 有没有办法将 ConcurrentDictionary.TryUpdate 与 lambda 表达式一起使用?

我有一个简单的场景,我想更新现有项目的值。只有AddOrUpdate方法提供了一个委托(delegate),我可以在其中更新旧值。但是,如果key不存在,我不想添加任何内容。还有TryUpdate方法没有重载,我可以获得旧值。有没有办法用当前的API来做到这一点?这是我要找的签名:boolTryUpdate(TKeykey,FuncupdateValueFactory) 最佳答案 您必须准备好循环并可能多次调用Func(与使用一个的GetOrAdd重载相同)。这意味着如果Func有副作用,从外部看它不会是原子的。确实,Func不应该

c# - 具有上限的线程安全集合

我正在寻找具有以下属性的集合:threadsafe:将在asp.net中使用,多个客户端可以同时尝试添加、删除和访问成员ma​​xelements:我希望能够在构造时设置一个上限,最大元素数TryAdd:一种与BlockingCollection.TryAdd(T)相同的方法将是完美的,即如果已达到最大元素数,它将返回false类似字典:在大多数其他方面是ConcurrentDictionary将是完美的,即能够通过键识别元素,删除任何项目(不仅仅是第一个或最后一个,我认为这将是BlockingCollection的限制)在尝试自己动手之前,我的问题是:我是不是错过了一个可以对集合中的

c# - .NET ConcurrentDictionary 初始容量设置为任意质数,而不是 MSDN 示例文档中的预期容量。为什么?

我只是在看MSDNdocumentationforConcurrentDictionary,我在“示例”代码中看到了这一点://WeknowhowmanyitemswewanttoinsertintotheConcurrentDictionary.//Sosettheinitialcapacitytosomeprimenumberabovethat,toensurethat//theConcurrentDictionarydoesnotneedtoberesizedwhileinitializingit.intNUMITEMS=64;intinitialCapacity=101;供引用

c# - 如何在 .NET ConcurrentDictionary 中实现 remove_if 功能

我有一个场景,我必须为ConcurrentDictionary中的给定键保留引用计数对象,如果引用计数达到0,我想删除该键。这必须是线程安全的,因此我计划使用ConcurrentDictionary。示例程序如下。在并发字典中,我有key和value,值是KeyValuePair,它保存我的自定义对象和引用计数。ConcurrentDictionary>ccd=newConcurrentDictionary>();//followingcodeaddsthekey,ifnotexistswithreference//countformycustomobjectto1//ifthekey

c# - 按值对 ConcurrentDictionary 进行排序

我可以像这样按值对我的ConcurrentDictionary进行排序:staticConcurrentDictionaryProxies=newConcurrentDictionary();Proxies.OrderBy(p=>p.Value.Speed);这很棒,除了我想将新的重新排序的列表设置为字典,有效地对字典本身进行排序,而不是仅仅接收排序项目的结果列表。我尝试做这样的事情但没有运气-字典在之后仍然是无序的:Proxies=newConcurrentDictionary(Proxies.OrderBy(p=>p.Value.Speed));看起来这样做对字典没有影响。我还尝试

c# - Iterating Over ConcurrentDictionary 只读时,ConcurrentDictionary 是否被锁定?

我在我的网络应用程序中创建了一个ConcurrrentDictionary作为应用程序对象。它在session之间共享。(基本上用作存储库。)有时,任何可用的session都会将新项目添加到字典中。仅允许管理员查看现在,我想允许管理员列出字典中的所有值,但管理员不会添加或删除项目,相反我只会提供一种方式让管理员查看通过遍历项目来读取集合中的项目。(伪)代码看起来像这样:foreach(vareinEmployeeCache.Instance.AllEmployees){Console.WriteLine(e.Key);}我的问题是:如果我遍历项目,ConcurrentDictionar