ASP.NET 定时器回调方法的重入
话不多说,请看代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceNET.MST.Sixth.Reenter
{
classReenter
{
//用来造成线程同步问题的静态成员
privatestaticintTestInt1=0;
privatestaticintTestInt2=0;
privatestaticobjectlocko=newobject();
staticvoidMain(string[]args)
{
Console.WriteLine("System.Timers.Timer回调方法重入测试:");
TimersTimerReenter();
//这里确保已经开始的回调方法有机会结束
System.Threading.Thread.Sleep(2*1000);
Console.WriteLine("System.Threading.Timer回调方法重入测试:");
ThreadingTimerReenter();
Console.Read();
}
///<summary>
///展示System.Timers.Timer的回调方法重入
///</summary>
staticvoidTimersTimerReenter()
{
System.Timers.Timertimer=newSystem.Timers.Timer();
timer.Interval=100;//100毫秒
timer.Elapsed+=TimersTimerHandler;
timer.Start();
System.Threading.Thread.Sleep(2*1000);//运行2秒
timer.Stop();
}
///<summary>
///展示System.Threading.Timer的回调方法重入
///</summary>
staticvoidThreadingTimerReenter()
{
//100毫秒
using(System.Threading.Timertimer=newSystem.Threading.Timer
(newSystem.Threading.TimerCallback(ThreadingTimerHandler),null,0,100))
{
System.Threading.Thread.Sleep(2*1000);//运行2秒
}
}
///<summary>
///System.Timers.Timer的回调方法
///</summary>
///<paramname="sender"></param>
///<paramname="args"></param>
privatestaticvoidTimersTimerHandler(objectsender,EventArgsargs)
{
lock(locko)
{
Console.WriteLine("测试整数:"+TestInt1.ToString());
//睡眠10秒,保证方法重入
System.Threading.Thread.Sleep(300);
TestInt1++;
Console.WriteLine("自增1后测试整数:"+TestInt1.ToString());
}
}
///<summary>
///System.Threading.Timer的回调方法
///</summary>
///<paramname="state"></param>
privatestaticvoidThreadingTimerHandler(objectstate)
{
lock(locko)
{
Console.WriteLine("测试整数:"+TestInt2.ToString());
//睡眠10秒,保证方法重入
System.Threading.Thread.Sleep(300);
TestInt2++;
Console.WriteLine("自增1后测试整数:"+TestInt2.ToString());
}
}
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!