当前位置: 首页 > news >正文

网站开发的方法有哪些外贸营销推广公司

网站开发的方法有哪些,外贸营销推广公司,网站开发前端和后端技术,怎样创办网站根据 .NET 官方文档的定义#xff1a;ConcurrentDictionaryTKey,TValue Class 表示可由多个线程同时访问的线程安全的键/值对集合。这也是我们在并发任务中比较常用的一个类型#xff0c;但它真的是绝对线程安全的吗#xff1f;仔细阅读官方文档#xff0c;我们会发… 根据 .NET 官方文档的定义ConcurrentDictionaryTKey,TValue Class 表示可由多个线程同时访问的线程安全的键/值对集合。这也是我们在并发任务中比较常用的一个类型但它真的是绝对线程安全的吗仔细阅读官方文档我们会发现在文档的底部线程安全性小节里这样描述ConcurrentDictionaryTKey,TValue 的所有公共和受保护的成员都是线程安全的可从多个线程并发使用。但是通过一个由 ConcurrentDictionaryTKey,TValue 实现的接口的成员包括扩展方法访问时不保证其线程安全性并且可能需要由调用方进行同步。也就是说调用 ConcurrentDictionary 本身的方法和属性可以保证都是线程安全的。但是由于 ConcurrentDictionary 实现了一些接口例如 ICollection、IEnumerable 和 IDictionary 等使用这些接口的成员或者这些接口的扩展方法不能保证其线程安全性。System.Linq.Enumerable.ToList 方法就是其中的一个例子该方法是 IEnumerable 的一个扩展方法在 ConcurrentDictionary 实例上使用该方法当它被其它线程改变时可能抛出 System.ArgumentException 异常。下面是一个简单的示例static void Main(string[] args) {var cd new ConcurrentDictionaryint, int();Task.Run(() {var random new Random();while (true){var value random.Next(10000);cd.AddOrUpdate(value, value, (key, oldValue) value);}});while (true){cd.ToList(); //调用 System.Linq.Enumerable.ToList抛出 System.ArgumentException 异常} } System.Linq.Enumerable.ToList 扩展方法发生异常是因为扩展方法 ToList 中调用了 List 的构造函数该构造函数接收一个 IEnumerableT 类型的参数且该构造函数中有一个对 ICollectionT 的优化由 ConcurrentDictionary 实现的。System.Collections.Generic.ListT 构造函数在 List 的构造函数中首先通过调用 Count 获取字典的大小然后以该大小初始化数组最后调用 CopyTo 将所有 KeyValuePair 项从字典复制到该数组。因为字典是可以由多个线程改变的在调用 Count 后且调用 CopyTo 前字典的大小可以增加或者减少。当 ConcurrentDictionary 试图访问数组超出其边界时将引发 ArgumentException 异常。ConcurrentDictionaryTKey,TValue 中实现的 ICollection.CopyTo 方法如果您只需要一个包含字典所有项的单独集合可以通过调用 ConcurrentDictionary.ToArray 方法来避免此异常。它完成类似的操作但是操作之前先获取了字典的所有内部锁保证了线程安全性。注意不要将此方法与 System.Linq.Enumerable.ToArray 扩展方法混淆调用 Enumerable.ToArray 像 Enumerable.ToList 一样可能引发 System.ArgumentException 异常。看下面的代码中static void Main(string[] args) {var cd new ConcurrentDictionaryint, int();Task.Run(() {var random new Random();while (true){var value random.Next(10000);cd.AddOrUpdate(value, value, (key, oldValue) value);}});while (true){cd.ToArray(); //ConcurrentDictionary.ToArray, OK.} } 此时调用 ConcurrentDictionary.ToArray而不是调用 Enumerable.ToArray因为后者是一个扩展方法前者重载解析的优先级高于后者。所以这段代码不会抛出异常。但是如果通过字典实现的接口继承自 IEnumerable使用字典将会调用 Enumerable.ToArray 方法并抛出异常。例如下面的代码显式地将 ConcurrentDictionary 实例分配给一个 IDictionary 变量static void Main(string[] args) {System.Collections.Generic.IDictionaryint, int cd new ConcurrentDictionaryint, int();Task.Run(() {var random new Random();while (true){var value random.Next(10000);cd[value] value;}});while (true){cd.ToArray(); //调用 System.Linq.Enumerable.ToArray抛出 System.ArgumentException 异常} } 此时调用 Enumerable.ToArray就像调用 Enumerable.ToList 时一样引发了 System.ArgumentException 异常。总结正如官方文档上所说的那样ConcurrentDictionary 的所有公共和受保护的成员都是线程安全的可从多个线程并发调用。但是通过一个由 ConcurrentDictionary 实现的接口的成员包括扩展方法访问时并不是线程安全的此时要特别注意。如果需要一个包含字典所有项的单独集合可以通过调用 ConcurrentDictionary.ToArray 方法得到千万不能使用扩展方法 ToList因为它不是线程安全的。参考http://blog.i3arnon.com/2018/01/16/concurrent-dictionary-tolist/  ConcurrentDictionary Is Not Always Thread-Safe https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentdictionary-2  ConcurrentDictionaryTKey,TValue Class作者 技术译民出品 技术译站https://ITTranslator.cn/END
http://www.sadfv.cn/news/283876/

相关文章:

  • 深圳住房和建设局网站置换平台wordpress qq登录微信
  • 企业网站的意义深圳sem竞价托管
  • 小说网站开发背景wordpress music pro
  • 怎么做一个网站熊掌号WordPress推送
  • 工作室网站建设的意义wordpress安卓版教程
  • 社保网站上做减员一直不审核电子商务网站建设参考书
  • 彩票资讯网站建设无刷新wordpress主题
  • 网站制作多少页学校网站开发说明书文档
  • 甘肃网站建设公司电话重庆颐众达网站
  • 做产品推广什么网站会比较好酒业网站模板下载
  • 安徽省建设工程造价管理总站网站手机网站上线左右滑动
  • 厦门在线制作网站怎么配置网站服务器
  • 怎样学网站建设公司网站功能
  • 做娃衣的布料去哪个网站公司图标设计logo
  • 在线优化网站宝安网站建设公司968
  • 阜城网站建设wordpress删除重复文章的三种方法
  • 企业做网站要多少钱济南建筑公司
  • 个性化网站建设开发网站建设组织机构
  • 电商网站数据中心建设方案做网站怎么收集资料
  • 嘉兴模板建站定制网站网站域名备案证书
  • 做电力招聘的有哪些网站宠物网页设计图片
  • 网站定制联通卡做网站注册35类还是42
  • 看守所加强自身网站建设工作总结河南平顶山网站建设公司
  • 景安一个空间怎么做多个网站优设设计网站导航
  • 哈尔滨网站建设代理商北京做家教的的网站
  • 网站如何做微信推广地产网站互动设计
  • 成都网站设计平台有没有手机网站推荐
  • 网站服务器组建公司网站ICP注销
  • 门户网站建设策划网站建设国外
  • 网站设计工作室做广个公司网站权重