C# 当我尝试在另一个类方法中检索信息时,缓存将为null

C# 当我尝试在另一个类方法中检索信息时,缓存将为null,c#,caching,C#,Caching,我正在尝试使用缓存来保存一些信息供以后使用。这是我分配缓存的方式: foreach(MibGet Device in DeviceValuesList) { if (HttpContext.Current.Cache[DeviceID] == null) { HttpContext.Current.Cache[DeviceID] = DeviceValue; } } 我可以在调试器中看到,这段代码工作得非常好,我想要的所有数据都被正确分配。但是当我尝试像

我正在尝试使用缓存来保存一些信息供以后使用。这是我分配缓存的方式:

foreach(MibGet Device in DeviceValuesList)
{
    if (HttpContext.Current.Cache[DeviceID] == null)
    {
        HttpContext.Current.Cache[DeviceID] = DeviceValue;
    }
}
我可以在调试器中看到,这段代码工作得非常好,我想要的所有数据都被正确分配。但是当我尝试像这样从缓存(从另一个类方法)检索此信息时:


它抛出空引用异常。在调试器中,它显示
HttpContext.Current
为空。可能是什么问题?我如何解决这个问题?

我假设您的缓存是一个字典。而不是

if (get.Value != HttpContext.Current.Cache[get.DeviceID.ToString()].ToString())
你应该写

if (!HttpContext.Current.Cache.ContainsKey(get.DeviceID))

在第一个代码段中,您将
Device.Value
放入缓存,但在第二个代码段中,您将
DeviceID
放入缓存。我看不出这是怎么回事。

HttpContext。当没有当前的
HttpContext
时,Current
为空。ASP.NET对每个请求模型使用一个线程。它创建一个
HttpContext
实例,并将其与处理请求的线程相关联。但是,如果通过使用任务或异步编程显式或隐式地创建线程,它可能与
HttpContext


我建议您使用其他一些缓存类,例如
System.Runtime.Caching.MemoryCache
,它们不绑定到
HttpContext

“get”是一个对象,它具有属性“DeviceID”和“Value”。我需要检查get的新值是否与旧值不同。这里唯一的问题是,当我尝试检索缓存数据时,“HttpContext.Current”已经为空,尽管它是在几秒钟前设置的。我需要找出它为什么会为空。如果没有看到更多的代码,很难回答这个问题。我编辑了我的代码,使其更简单、更清晰,以便于理解。该程序确实有多个线程。这可能就是问题所在。我将尝试你说的缓存类。你知道任何好的文档吗,或者有一个清晰的示例说明如何使用System.Runtime.Caching.MemoryCache?任何帮助都将不胜感激。@VaxoBasilidze,MemoryCache非常简单。这里有一个简单的例子:
if (!HttpContext.Current.Cache.ContainsKey(get.DeviceID))