C# Azure运行作业上的ASP.NET MVC“;“每小时”;
我有一个ASP.NET MVC站点,我正在Azure中运行。我想每小时开始一次更新数据的工作 我目前每小时有一次Azure作业设置,以点击我的控制器/操作方法,该方法调用“数据加载”服务 通过这种方式,它启动了流程,并允许Azure作业“成功” 然而,这项工作现在正在自己的线程上运行,我认为这是不安全的。我将代码包装在try/catch中,有时我会看到记录了线程中止。我应该如何在没有线程中止的情况下成功运行这5-10分钟的数据加载 此外,我只希望在5-10分钟的数据加载发生后1小时内再次运行作业 因此,如果加载在上午8点开始,在8:10结束,我不希望下一次数据加载发生在8:11之前(以此类推)C# Azure运行作业上的ASP.NET MVC“;“每小时”;,c#,asp.net-mvc,multithreading,azure,C#,Asp.net Mvc,Multithreading,Azure,我有一个ASP.NET MVC站点,我正在Azure中运行。我想每小时开始一次更新数据的工作 我目前每小时有一次Azure作业设置,以点击我的控制器/操作方法,该方法调用“数据加载”服务 通过这种方式,它启动了流程,并允许Azure作业“成功” 然而,这项工作现在正在自己的线程上运行,我认为这是不安全的。我将代码包装在try/catch中,有时我会看到记录了线程中止。我应该如何在没有线程中止的情况下成功运行这5-10分钟的数据加载 此外,我只希望在5-10分钟的数据加载发生后1小时内再次运行作业
显然,我目前还没有准备好。理论上,我可以设置一个每分钟ping一次的作业,看看是否是“运行时间”,但我不一定要这样做 正如评论中已经提到的,您最好将“长期运行”任务与您的网站分离,您仍然可以将其保留在相同的解决方案中,作为分离的项目,以使共享业务逻辑代码更简单,并且只需部署到两个不同的环境-网站+WebJob、网站+WebWorker 您可以尝试缓解IIS上长时间运行的任务的问题,请参阅此处的一些参考资料:
- 基于-WebBackgrounder-and的解决方案
- 所有技术的总结都很好-
您可以在上一次使用Service Bus完成任务一小时后安排您的任务—通过使用set将消息添加到队列—如果您的任务对毫秒不敏感,这就足够了。您使用的是web和worker角色还是网站之类的角色?如果使用角色,为什么不创建一个工作者角色的XS实例来进行后台处理呢?我没有使用工作者角色。只是使用一个“网站”,我与调度ping。我看到的worker角色的问题是,它必须位于我当前的MVC解决方案True之外,但是如果您的业务/db逻辑位于解决方案中它自己的项目中,那么一个简单的引用将为您提供相同的逻辑/代码。作为主要工作者角色的原因之一,my 2cents用于运行循环代码。网站通常在使用Azure功能时(应用程序池回收/web应用程序进入睡眠状态的频率/等等)表现不佳。这就是它建造的目的。非常棒。
public JsonResult Load()
{
Task.Factory.StartNew(() => DataService.LoadData());
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}