ASP.NET核心线程安全全局变量

时间:2020-04-24 14:00:34

标签: asp.net-core

我有一个.net核心剃刀应用程序,该应用程序有一个特殊的用例,在该应用程序中,我需要有一个全局计数器,该计数器将随每个请求而递增,但仍应保持线程安全。

同样在Web应用程序加载时,将使用实体框架从数据库中读取此计数器。

在这种情况下,我认为静态变量不是线程安全的(因为它可以被一个请求读取,然后在另一个请求读取其先前值之后进行修改)

所以我想知道是否需要锁定机制。

1 个答案:

答案 0 :(得分:0)

如果您正在从数据库中读取计数器,我认为每个请求都会增加值并将其保存在数据库中?在这种情况下,我更喜欢使用锁定。

这可能是一个幼稚的解决方案,但这是我的解决方法:

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();
}