gpt4 book ai didi

c# - 静态缓存错误

转载 作者:行者123 更新时间:2023-11-30 22:48:33 24 4
gpt4 key购买 nike

我有一个静态缓存,它会在设定的时间更新数据库中的通用对象列表。

它只是一个简单的静态列表:

private static List<myObject> _myObject;

public List<myObject> FillMyObject()
{
if(_myObject == null || myTimer)
_myObject = getfromDataBase();
}

我有 2 种方法来更新我的对象,分别是 UpdateMyObjectRemoveAnEntryFromMyObject

一切似乎都运行良好,但每个人都偶尔会遇到大量错误。然后它消失了,看起来又好了。有谁知道发生了什么事?

最佳答案

您需要使用 lock每当您访问或更新静态缓存时声明。 lock 语句将阻止其他线程执行,直到它完成。如果您不这样做,您可能有一个线程试图循环遍历集合,同时另一个线程正在删除一行。根据您的具体情况,您可能希望使用 double check locking .

    static readonly object lockObj = new object();
private static List<myObject> _myObject;

public List<myObject> FillMyObject()
{
lock (lockObj)
{
if(_myObject == null || myTimer)
_myObject = getfromDataBase();
}
}


public List<myObject> UpdateMyObject(somevalue)
{
lock (lockObj)
{
_myObject.RemoveAll(delegate(myObject o)
{
return o.somevalue == somevalue;
});)
}
}

Further Reading

关于c# - 静态缓存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608129/

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