c# – 在静态类中使字典安全吗?
发布时间:2020-12-15 22:27:30 所属栏目:百科 来源:网络整理
导读:到目前为止,我一直在C#库中开发静态类,所有方法显然都是静态的.传入任何被操纵的数据,因此这是线程安全的.但是,我正在实现一个功能,需要一个Dictionary来计算某些字符串ID,这些ID将针对每个线程生成不同的内容.显然使用类似下面的东西将不是线程安全的,因为
到目前为止,我一直在C#库中开发静态类,所有方法显然都是静态的.传入任何被操纵的数据,因此这是线程安全的.但是,我正在实现一个功能,需要一个Dictionary来计算某些字符串ID,这些ID将针对每个线程生成不同的内容.显然使用类似下面的东西将不是线程安全的,因为多个线程将使用相同的字典并弄乱其状态:
private static readonly Dictionary<string,uint> MyTallies = new Dictionary<string,uint>(); 那么什么是使这个线程安全的最佳选择?我看到它的方式,有3个(有点坏)选项: >使类非静态;每个线程都必须创建一个新实例,并且可以为每个线程创建一个新的Dictionary.表现受到欢迎 那么这里我最好的选择是什么,还是有其他更好的选择我还没有想过? 编辑:一个简单的用例: internal static class HtmlFormatter { private static readonly Dictionary<string,uint>(); internal static string RenderHtml(string markdown) { string outputHtml = ""; // (process markdown and render to HTML) // (found a heading that requires a unique ID) var id = generatedId; string unique = ""; if (MyTallies.ContainsKey(id)) { // Already exists; suffix "-x" where x is count of duplicate IDs unique = "-" + ++MyTallies[id]; } else { MyTallies[id] = 0; } id += unique; // (append id string to HTML output and continue processing) return outputHtml; } } 解决方法
有关某些线程安全集合的概述,请参见
this
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |