如何在ASP.NET MVC中运行前台计划任务?

时间:2017-12-06 06:29:13

标签: c# asp.net asp.net-mvc

我在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那样使用单独的后台任务,因为我想更新当前正在运行的应用程序的值。

我该怎么办?感谢。

更新 认为这是重复的伙伴,请阅读问题。我想更新当前运行的应用程序中的共享值。在单独的后台任务中更改它不会为当前应用程序更改它。

2 个答案:

答案 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任务计划程序中定义了一个每天访问该站点的任务