我有一个.net核心剃刀应用程序,它有一个特殊的用例,其中我需要一个全局计数器,该计数器将在每次请求时递增,但它应该保持线程安全。
同样在web应用程序加载时,将使用实体框架从数据库中读取此计数器。
我不认为静态变量在这种情况下是线程安全的(因为它可以被一个请求读取,然后在另一个请求读取它之前的值后被修改)
所以我想知道是否需要一个锁定机制。
发布于 2020-04-24 14:25:13
如果你正在从数据库中读取计数器,我假设每个请求都会增加值,并将其保存在数据库中?在这种情况下,我更喜欢使用锁定。
这可能是一个天真的解决方案,但以下是我解决它的方法:
private static object _requestLock = new object();
public string UpdateCounter()
{
// it can be as well Config table with lots of different records and one of them would be Counter value
var counter = _dbContext.Counters.FirstOfDefault();
lock (_requestLock)
{
counter.Value++;
}
_dbContext.SaveChanges();
}
https://stackoverflow.com/questions/61410170
复制相似问题