【发布时间】:2014-05-22 15:19:45
【问题描述】:
我正在将 Classic ASP/VBScript 应用程序转换为 C#/ASP.Net。应用程序的 VBScript 部分是每个月在特定日期执行的一系列单独的脚本,每个单独的任务都在 Windows 调度程序中设置。大约有 35 个任务,包括数据库插入(保存每月历史数据、保存汇总账单数据)以及将一系列 Crystal Reports 导出为 PDF 和 Excel。每个任务都安排在一分钟左右,因为我不想同时请求使数据库服务器不堪重负。
当我在 C# 中处理此问题时,我想知道是否有一种方法可以在一个应用程序中完成,而不是我在 VBScript 中采用的单独脚本方法。我对 C# 很满意,因为在过去一年左右的时间里,我一直在使用它将应用程序的网站部分转换为 ASP.Net MVC,但我没有使用 C# 中的定时事件的经验。我正在考虑通过为每个任务创建一个单独的函数来解决这个问题,每个任务之间都有睡眠,以便在继续执行下一个任务之前有足够的时间进行数据库处理。类似于以下内容:
p.DoTask1();
Thread.Sleep(60000);
p.DoTask2();
Thread.Sleep(60000);
p.DoTask3();
Thread.Sleep(60000);
etc ...
这将包含在一个控制台应用程序中,该应用程序本身将在 Windows 调度程序中设置。
这是一种合理的方法吗?有更好的方法吗?我已经阅读了有关计时器和任务的信息,但我不确定它们是否适合我想要完成的任务。
【问题讨论】:
-
@Amicable 我的应用程序会知道数据库任务已完成,还是只知道它已将任务交给数据库服务器?另外,如果睡眠可以,我真的需要使用任务吗?我假设睡眠是最简单的选择。在我的场景中使用更复杂的选择是否有任何令人信服的理由?
-
@Amicable 大多数 db 任务都很快完成,所以每个任务之间的一分钟给了他们很多时间,所以这部分并不重要,但是我喜欢你知道什么时候 db 任务的方法由返回的记录完成,然后继续下一个任务
-
@Amicable 您能否在答案中总结您的 cmets,我会接受吗?谢谢。
-
好的,我已经做到了。很高兴我能帮忙:)
-
@LouiseEggleton,在 ASP.NET 中你真的应该使用
async/await来处理任务,像这样:stackoverflow.com/a/22962699/1768303
标签: c# asp.net scheduled-tasks sleep