【发布时间】:2014-11-18 14:59:49
【问题描述】:
我有一个在 Azure 中运行的 ASP.NET MVC 站点。我想开始一个工作,每小时更新一次数据。
我目前有一个每小时一次的 Azure 作业设置来访问我的控制器/操作方法,该方法调用“数据加载”服务。
public JsonResult Load()
{
Task.Factory.StartNew(() => DataService.LoadData());
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
这样它会启动进程并允许 Azure 作业“成功”
但是,该作业现在在它自己的线程上运行,我认为这不安全。我将代码包装在 try/catch 中,有时我看到记录了线程中止。我应该如何在不中止线程的情况下成功运行这个 5-10 分钟的数据加载?
另外,我只希望作业在 5-10 分钟的数据加载发生后恰好 1 小时再次运行。
因此,如果加载在上午 8 点开始并在 8:10 结束,我不希望下一次数据加载在 8:11 之前发生(依此类推)
显然,我目前还没有为此做好准备。从理论上讲,我可以设置一个工作来每分钟 ping 一次,看看它是否是“运行时间”,但我不一定想这样做。
【问题讨论】:
-
您使用的是网络和辅助角色还是网站?如果使用角色,为什么不创建工作者角色的 XS 实例来进行后台处理?
-
我没有使用辅助角色。只需使用我正在与调度程序 ping 的“网站”。我看到的工人角色的问题是它必须在我当前的 MVC 解决方案之外生活
-
是的,但是如果您的业务/数据库逻辑在您的解决方案中的自己的项目中,那么一个简单的参考将为您提供相同的逻辑/代码。只是我的 2cents 作为主要工人角色的原因之一是运行循环代码。网站通常很糟糕(应用程序池回收/网络应用程序进入睡眠的频率等)
-
使用 Azure 函数。这就是它的目的。这非常棒。 docs.microsoft.com/en-us/azure/azure-functions/…
标签: c# asp.net-mvc multithreading azure