C# 锁定静态方法 请考虑此代码: public static class SomeClass { private static List<Item> Items; //Constructor public static void AddToChache(string key, object item) { Items.Add(new Item(){ key = key , content = item, DateAdded = DateTime.Now}); } public static List<Item> GetAllItems() { return Items; } .... 公共静态类SomeClass { 私有静态列表项; //建造师 公共静态void AddToChache(字符串键,对象项) { Add(newitem(){key=key,content=Item,DateAdded=DateTime.Now}); } 公共静态列表GetAllItems() { 退货项目; } ....

C# 锁定静态方法 请考虑此代码: public static class SomeClass { private static List<Item> Items; //Constructor public static void AddToChache(string key, object item) { Items.Add(new Item(){ key = key , content = item, DateAdded = DateTime.Now}); } public static List<Item> GetAllItems() { return Items; } .... 公共静态类SomeClass { 私有静态列表项; //建造师 公共静态void AddToChache(字符串键,对象项) { Add(newitem(){key=key,content=Item,DateAdded=DateTime.Now}); } 公共静态列表GetAllItems() { 退货项目; } ....,c#,asp.net,multithreading,c#-4.0,thread-safety,C#,Asp.net,Multithreading,C# 4.0,Thread Safety,如果我想在应用程序级创建缓存,这个方法是否需要lock来处理并发性 我想要线程安全的方法 如果我想在应用程序级创建缓存,这个方法是否需要锁来处理并发性 不,如果您使用线程安全的集合,例如,否则是的-它确实如此。最好只使用现有的缓存(如MemoryCache),而不是实现自己的缓存(特别是使用列表,甚至不使用字典)“如果这是线程安全的,则永远不应返回实际的Items集合。一旦返回,调用方在使用该集合时可以修改该集合。如果必须返回所有项,则返回集合的副本。是的,该复制操作必须被锁定。”。“谢谢,但问

如果我想在应用程序级创建缓存,这个方法是否需要
lock
来处理并发性

我想要线程安全的方法

如果我想在应用程序级创建缓存,这个方法是否需要锁来处理并发性


不,如果您使用线程安全的集合,例如,否则是的-它确实如此。

最好只使用现有的缓存(如MemoryCache),而不是实现自己的缓存(特别是使用
列表,甚至不使用
字典
)“如果这是线程安全的,则永远不应返回实际的Items集合。一旦返回,调用方在使用该集合时可以修改该集合。如果必须返回所有项,则返回集合的副本。是的,该复制操作必须被锁定。”。“谢谢,但问题是我忘记了DateTime属性。我有两个以上的属性,所以在这种情况下我不能使用字典。”