在后台每 5 分钟执行一次函数

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

以上是关于在后台每 5 分钟执行一次函数的主要内容,如果未能解决你的问题,请参考以下文章

crontab怎样每隔5分钟执行一次脚本

cron和crontab命令详解 crontab 每分钟每小时每天每周每月每年定时执行 crontab每5分钟执行一次

php利用crontab执行 5分钟发邮件给用户 (包含每分钟发一次)

thinkphp3.2.3如何每30分钟自动执行controller下的方法,这个是主动的,不需要访问,本人操作系统是win10

js每隔五分钟执行一个函数

请问在linux系统下如何每五分钟自动执行一次页面