我在ASP.NET MVC
应用程序中使用此代码在应用程序中共享一个值。
public static class Global
{
public static string Token { get; private set; };
public static void LoadFromFile()
{
// loads Token value from a settings file
}
}
我想要做的是每天运行一次LoadFromFile
方法来更新Token
值。
我不能像HangFire
那样使用单独的后台任务,因为我想更新当前正在运行的应用程序的值。
我该怎么办?感谢。
更新 认为这是重复的伙伴,请阅读问题。我想更新当前运行的应用程序中的共享值。在单独的后台任务中更改它不会为当前应用程序更改它。
答案 0 :(得分:0)
为了帮助那些流浪的政策休息一段时间,我得到了答案。
我可以运行计划的后台任务来访问我的站点中的端点,并从那里更新静态Token
值。
答案 1 :(得分:0)
我曾经遇到类似的要求,这是我使用的技巧
private static DateTime lastRunAt;
private static object loadingTokenLock = new object();
private static bool TokenUpdateNeeded
{
get
{
return DateTime.UtcNow.DayOfYear != lastRunAt.DayOfYear;
}
}
public static void TryLoadToken()
{
if (TokenUpdateNeeded)
lock (loadingTokenLock)
if (TokenUpdateNeeded)
LoadFromFile();
}
public static void LoadFromFile()
{
// loads Token value from a settings file
lastRunAt = DateTime.UtcNow;
}
void Session_Start(object sender, EventArgs e)
{
TryLoadToken();
}
我无法记住确切的编码,但我们的想法是在当天的第一次请求时更新令牌。
问题是,如果您的应用程序未访问超过一天,则不会更新令牌。因此,我们在Windows任务计划程序中定义了一个每天访问该站点的任务