asp.net-mvc - ASP.NET——启动一个线程在未来几分钟内工作?

标签 asp.net-mvc multithreading scheduling

我有一个应用程序,它依赖于在特定时间触发事件(电话)。我正在使用共享主机,因此我不能只设置 Windows 服务或 cron 作业。

我有一个 URL(例如/CheckCalls),用于查询从现在开始 +/- 60 秒内是否安排了任何通话,然后将其关闭。

我定期通过 bash 脚本(或通过 cron 服务)调用它。

如果在 Controller 中,我在执行开始时启动一个有延迟的新线程(例如 sleep(2000)),我是否可以期望它在 Controller 完成后 2 秒仍处于事件状态,以触发其消息?

这样我就可以 a) 避免重复,b) 确保事情在正确的时间进行。

如下所示,Thread.Sleep() 并不是我问题的真正焦点。我已经阅读并使用了替代方法,但问题仍然存在:如果我在某个地方的付费托管环境中,我可以在页面中启动一个可能存在 2 分钟的后台线程,并期望它执行吗?

编辑:我发现这个线程处理这个主题,并使用 HttpRuntime.Cache 作为实现这个的黑客。

也许更有趣的是,线程中的一条评论说明了我所担心的事情:如果没有其他事情发生,计时器将不会使应用程序池保持事件状态。

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

最佳答案

使用 Thread.Sleep 是一个糟糕的设计选择,原因如下:

1) 它在线程休眠期间阻塞线程。 2)它耗尽了线程池中的线程,因此该解决方案根本无法很好地扩展。 3) 这是一个糟糕的计时机制,因为这里存在一个时间片或量子,它在操作系统之间甚至同一操作系统的版本之间有所不同(例如:Windows)。

上一个 SO 问题提供了有关 Thread.Sleep 为何不好的更多信息:

Why Is Thread.Sleep So Harmful

关于asp.net-mvc - ASP.NET——启动一个线程在未来几分钟内工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099997/

相关文章:

asp.net-mvc - 如何在asp.net MVC中将日期时间从 View 传递到 Controller

c++ - 是否有必要锁定一个*仅从一个线程写入*而*仅从*另一个线程读取的数组?

C# 如何从另一个线程关闭主 UI 线程上的窗口窗体

algorithm - 为成对工作的人安排轮类

java - 在java中模拟线程调度(stackless java?)

asp.net-mvc - MVC 中的页面加载事件

c# - 如何在 Asp.Net MVC 中使用属性路由为操作生成 URL

java - @Scheduled & 调度程序 : What exactly does pool-size do?

asp.net Web 应用程序模板缺少 Visual Studio 2017

c++ - 如何在 C++ 中测试条件变量?