我有一个网站,允许用户将项目的电子表格上传到数据库。上传电子表格后,将评估符合个人用户兴趣的关键字,并通过电子邮件向这些用户发送警报以访问该网站。但是,当电子表格成功上传后,管理员需要ftp进入他们的服务器并上传任何相关图像。这可能需要一个小时才能完成。
我将在新线程上执行电子邮件警报,并想知道,当调用该线程时,我可以安全地从其中调用Thread.Sleep(360000)来暂停执行一小时。这会不会对服务器资源产生影响?如果有,还有另一种方法吗?
我无法创建计划任务,因为上传可能发生在一周的任何时间/星期几。
答案 0 :(得分:2)
您不能<100>确定您的应用程序池不会被回收,您的服务器重新启动,或任何其他可能导致您的线程从您身下消失的事件。
您必须拥有某种形式的计划任务,检查“早于X的事物”并运行每分钟/几分钟并进行处理,因为该方法可以让您从几乎任何事情中恢复(例如,服务器耗电一小时,您的计划任务赶上应该在此期间发生的所有电子邮件警报。)
答案 1 :(得分:2)
将必要的信息写入队列或文件,并编写处理队列的服务。这是处理此类任务的更强大的方法。但是,我对你的评论感到好奇:
但是,当电子表格是 成功上传了 管理员需要ftp进入他们的 服务器并上传任何相关图像。 这可能需要长达一个小时的时间 执行。
您如何知道任务将在一小时内完成?什么标志着任务的完成?为什么你不能在那时发射电子邮件,而不是预先安排警报?我可能会遗漏一些东西,但似乎你可能没有想到这一点。
答案 2 :(得分:1)
如果服务器在半小时后爆炸(更换可能的事件,例如“意外关闭”),该怎么办? 也许你应该想到一个完全不同的机制(在数据库中存储一些信息,定期检查一个多小时前完成的请求......)。
编辑:也许Windows Workflow Foundation可以为您提供的帮助提供帮助。