gpt4 book ai didi

c# - 对记录/隐含记录/未记录行为的保证

转载 作者:行者123 更新时间:2023-11-30 12:59:44 24 4
gpt4 key购买 nike

查看 ConcurrentDictionary 文档,它说了以下内容:

Represents a thread-safe collection of key/value pairs that can be accessed by multiple threads concurrently.

现在读到这篇文章时,我觉得我可以调用 ConcurrentDictionary API 中的任何方法,而且它是线程安全的...但这意味着也包括显式实现,我有那个保证吗?

我的例子是如果我想要一个原子操作从 ConcurrentDictionary 中删除一个项目,如果它的值是某个值的话。

所以我可以这样做:

var concurrentDictionary = new ConcurrentDictionary<string, string>();
concurrentDictionary.TryAdd("hey", "ho");

((ICollection<KeyValuePair<string, string>>) concurrentDictionary).Remove(new KeyValuePair<string, string>("hey", "ho"));

现在我查看了源代码,发现该操作既是原子操作又是线程安全的,但是它不在 ConcurrentDictionary API 上这一事实是否意味着我不应该使用它……或者也许我正在使用收集来做一些我不应该用它做的事情。

我可以更进一步,编写如下扩展方法:

public static boolean TryRemove(this ICollection<KeyValuePair<TKey, TValue>> collection, TKey key, TValue value)
{
return collection.Remove(new KeyValuePair<TKey, TValue>(key, value));
}

这将出现在 Intellisense 的 ConcurrentDictionary 中,因为它实现了 ICollection 接口(interface),许多开发人员甚至可能不知道有什么不愉快的(如果真的有什么?!)

编辑:我所说的“隐式记录”的意思是 ConcurrentDictionary 实现了一组接口(interface)。它的文档说它是线程安全的,但没有说明它是否仅适用于该页面上列出的方法,而是暗示对一个实例的所有操作都是安全的。

最佳答案

这是一个关于记录行为的问题。通常,您只能依靠记录在案的行为来实际持有。其他行为可能随时发生变化(在运行时、应用程序运行之间、框架补丁级别之间……)。

如果您可以在文档中找到这是安全的引用,那么您可以这样做。

如果没有,我通常会非常小心。另一方面,ConcurrentDictionary 是一个核心类型,BCL 团队在其工作中应用了极端的兼容性标准。即使在没有记录的生产应用程序中,我也可以这样做。他们非常小心,即使在主要框架版本之间也不打断调用者。

由于这些兼容性保证并且这是一个核心类型,我可以从 source code 中获取知识.

关于c# - 对记录/隐含记录/未记录行为的保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com