![]() |
1
1
编辑 :我个人认为下面的代码在技术上正确地回答了您的问题(如中所述,它提供了一种在不创建副本的情况下枚举集合中的值的方法)。一些开发商的声誉远比我强烈建议的要高 反对 出于他们在编辑/评论中解释的原因,这种方法。简而言之: 这显然是个坏主意。 所以我留下答案,但建议你不要用它。
除非我漏掉了什么,我相信你可以把你的价值观
但是,请注意(我猜您已经知道了),这种方法提供了
懒惰的评价
,这意味着
换句话说…好吧,看看这段代码(我当然是在猜测你这类代码的一些细节):
所以如果要求
(开始280Z28):下面是一个不熟悉“做事方式”的人如何锁定代码的示例:
(280Z28结束) |
![]() |
2
9
你有三个选择。 1)复制数据,分发副本。优点:不用担心线程安全访问数据。缺点:客户端得到的是过期数据的副本,而不是最新数据的副本。而且,复印也很贵。 2)分发一个对象,该对象在读取基础集合时将其锁定。您必须编写自己的只读集合,该集合引用“父”集合的锁。仔细设计这两个对象,这样就不可能出现死锁。优点:从客户的角度来看,它“工作正常”;它们可以获得最新的数据,而不必担心锁定问题。缺点:给你更多的工作。 3)把问题推给客户。公开锁,并要求客户端在使用之前锁定数据本身上的所有视图。优点:没有你的工作。缺点:为客户做更多的工作,他们可能不愿意或不能做的工作。死锁等风险,现在成了客户的问题,而不是你的问题。 |
![]() |
3
2
如果你想
快照
在字典的当前状态中,您确实无法使用此集合类型执行其他操作。这与
如果你不介意扔一个
|
![]() |
4
0
查看下一个可能性,只公开ICollection接口,因此在values()中可以返回自己的实现。此实现将仅对dictioanry.values使用引用,并始终对访问项使用readlock。 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |