首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为ASP.NET MVC实现作业调度器

为ASP.NET MVC实现作业调度器
EN

Stack Overflow用户
提问于 2010-11-24 07:36:48
回答 3查看 3K关注 0票数 1

我需要在我的Web中执行一些activities/jobs,例如索引一些信息、组织一些文件和计算一些统计数据.

我希望保留Web中的QoS (性能、内存消耗、.)。因此,我想为这些活动执行一个外部进程,而不是调用一个线程。类似于Apache MPM处理器 (它启动子进程来处理请求)。

  • 有什么最好的解决办法吗?
  • 你知道有图书馆能帮我吗?

谢谢你的进阶。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-25 09:33:12

最后,我实现了一个在外部进程中执行任务/作业的系统。

如果有人想知道我是如何实现它的,下面是一些细节。也许我会写一篇文章来分享解决方案和源代码。

基本上,我们有两个组件,Web.dll (ASP.NET应用程序)和一个名为TaskExecutor.exe的程序

Web.dll中,有一个活动调度程序可以按名称注册任务:例如:

代码语言:javascript
复制
ActivityScheduler.Get().RegisterActivity("GenerateSearchIndexes", 4 * 1000 * 60 * 60); //each 2 hours

活动调度程序在线程中执行每个活动,此线程调用外部进程ActivityExecutor.exe

此程序集引用Web.dll,该ActivityFactory具有获取活动的静态ActivityFactory。外部进程的源代码非常简单:

代码语言:javascript
复制
public static void Main (string[] args)
{
    try
    {
        if (args.Length == 0)
        {
            throw new ArgumentException("No activity name given", "ActivityName");
        }
        //parameter 0 is the activity name
        string activityName = args[0];
        IScheduledActivity activity = ActivityFactory.GetActivity(activityName);

        if (activityName != null)
        {
            activity.Execute(args);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error executing activity: " + ex.Message);
    }
}

您可以猜到这里的限制是活动必须是静态定义的,因此它们不能在其构造函数中接收参数。这些都是在IScheduledActivity.Schedule(string[] args)方法中传递的,就像一个程序所做的那样。

票数 1
EN

Stack Overflow用户

发布于 2010-11-24 08:13:59

您可以查看Quartz.NET,它允许您调度将在服务器上运行的作业。

票数 1
EN

Stack Overflow用户

发布于 2010-11-24 09:33:28

你能做一些像他们在堆栈交换网站上使用的事情吗?

https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4264445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档