关于网站定时执行任务计划以及多线程,该如何处理
关于网站定时执行任务计划以及多线程
怎么用控制台应用程序做一个定时执行多个不同的任务,每隔一定时间就会执行一次
------解决思路----------------------
假如你有20个任务,你还不能写“一个”控制台程序(因为你设计不了),你应该创建20个程序,有公用的部分引用一个公用的工程(编译为DLL)即可。
------解决思路----------------------
用控制台程序实现需要涉及很多因素,比如判断是否被异常终止,是否已完成操作等等。
怎么用控制台应用程序做一个定时执行多个不同的任务,每隔一定时间就会执行一次
------解决思路----------------------
假如你有20个任务,你还不能写“一个”控制台程序(因为你设计不了),你应该创建20个程序,有公用的部分引用一个公用的工程(编译为DLL)即可。
------解决思路----------------------
class Program
{
public delegate int MyFunDel();
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem((e) => {
DateTime time;
while (true)
{
time = DateTime.Now.ToLocalTime();
if (time.ToLongTimeString().Equals("16:08:00"))
{
new MyFunDel(MyFun).BeginInvoke(new AsyncCallback(MyAsyncCallback), null);
Thread.Sleep(500);
}
if (time.Second == 0)
{
Console.WriteLine("{0} {1}", time.ToShortDateString(), time.ToShortTimeString());
Thread.Sleep(500);
}
Thread.Sleep(500);
}
});
Console.ReadKey();
}
static int MyFun()
{
Console.WriteLine("服务器开始执行数据库操作.. 线程:{0}", Thread.CurrentThread.ManagedThreadId);
DateTime time = DateTime.Now;
Thread.Sleep(5000); //操作数据库
return (DateTime.Now - time).Seconds; //返回执行持续时间
}
//异步委托回调函数
static void MyAsyncCallback(IAsyncResult result)
{
AsyncResult aResult = (AsyncResult)result; //封装类 通过接口 实现多态
MyFunDel addDel = (MyFunDel)aResult.AsyncDelegate; //封装委托
int num = addDel.EndInvoke(result); //获取异步操作结果
string str = string.Format("{0} 操作数据库持续时间:{1}秒 线程:{2}",DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString(), num, Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(str);
File.AppendAllText(@"c:/log.txt", str);
}
}
用控制台程序实现需要涉及很多因素,比如判断是否被异常终止,是否已完成操作等等。