【问题标题】:Execute function every 5 minutes in background在后台每 5 分钟执行一次函数
【发布时间】:2013-02-03 20:24:21
【问题描述】:

我有从 Web 服务中读取数据的功能。使用该数据我创建位图。我将位图发送到显示创建的位图的面板(显示器)。手动让它像魅力一样工作。我现在需要的是,我的应用程序在后台每 5 分钟自动运行一次此功能。

我的应用程序在 IIS 下运行。我怎样才能做到这一点?有人可以帮我吗?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    Asp.Net 应用程序不是此类任务的正确框架。

    您可能应该为此类任务创建一个dedicated service

    另一种选择是创建一个scheduled task,它将每 X 分钟运行一次

    附带说明,如果您必须通过您的 asp.net 应用程序执行此操作,我建议您阅读如何Simulate a Windows Service using ASP.NET to run scheduled jobs

    【讨论】:

    • 谢谢,我会看看它。是的,我必须在 asp.net 中执行此操作,因为整个应用程序都是用 asp.net 编写的
    【解决方案2】:

    你不必依赖asp.net项目,但你可以使用Cache Callback来做到这一点。 我找到了一个很好的方法来做到这一点。 实际上我不记得链接,所以我会给你一个我使用的代码:

    public abstract class Job
    {
        protected Job()
        {
            Run();
        }
    
        protected abstract void Execute();
        protected abstract TimeSpan Interval { get; }
    
        private void Callback(string key, object value, CacheItemRemovedReason reason)
        {
            if (reason == CacheItemRemovedReason.Expired)
            {
                Execute();
                Run();
            }
        }
    
        protected void Run()
        {
            HttpRuntime.Cache.Add(GetType().ToString(), this, null, 
                Cache.NoAbsoluteExpiration, Interval, CacheItemPriority.Normal, Callback);
        }
    }
    
    Here is the implementation
    public class EmailJob : Job
    {
        protected override void Execute()
        {
            // TODO: send email to whole users that are registered 
        }
    
        protected override TimeSpan Interval
        {
            get { return new TimeSpan(0, 10, 0); }
        }
    }
    

    【讨论】:

    • 我必须把它放在哪里才能让我的方法自动执行?
    • 我在整个项目的条件下使用它,但你只需要触发一次,在 global.asax-> Application_Start
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多