我有一个持续跟踪温度的数据库。我还有一个 Controller ( Controller A)可以计算 60 分钟内的平均温度(这可以由用户在前端更改)。如果 Controller A 的计算超出了设定的最高温度,它会调用另一个 Controller ,通过电子邮件通知用户( Controller B)。
Pseudo code:
while(Controller A) <-- runs in the background
{
if(max temperature is reached)
Call Controller B
}
我的问题是,我怎样才能让服务器持续运行 Controller A 而不会变得非常慢?我读到 SignalR 可以做自动化的事情,但我不太确定我应该寻找哪些关键字。
如果有人能为我指出正确的方向,那就太好了。
最佳答案
您不应该在 ASP.NET 线程上运行如此长时间的进程。你有两个选择
1) 创建一个 Windows 服务,它会每隔 n 分钟检查一次您的数据库表并执行所需的操作(例如发送电子邮件等)
2) ServiceBus/RabbitMQ 等消息服务
3) 如果输入通过应用程序中的 Controller 进入数据库表,您可以将此值传递给另一个服务/线程/进程以进行计算和发送电子邮件。
复制自Mason's在对 future 读者的回答中发表评论:还有其他选项,如 Hangfire、FluentScheduler、Quartz 等。这些库是围绕在 ASP.NET 后台手动运行某些代码的一些缺陷而设计的。 Scott Hanselman 在 excellent blog post 中描述了它们带有示例代码。
关于c# - 如何安排在我的 MVC 网络应用程序中自动运行 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400778/