ASP.NET 定时器回调方法的重入

2025-05-29 0 35

话不多说,请看代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78
using System;

using System.Collections.Generic;

using System.Text;

namespace NET.MST.Sixth.Reenter

{

class Reenter

{

//用来造成线程同步问题的静态成员

private static int TestInt1=0;

private static int TestInt2 = 0;

private static object locko = new object();

static void Main(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>

static void TimersTimerReenter()

{

System.Timers.Timer timer = new System.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>

static void ThreadingTimerReenter()

{

//100毫秒

using (System.Threading.Timer timer = new System.Threading.Timer

(new System.Threading.TimerCallback(ThreadingTimerHandler), null, 0, 100))

{

System.Threading.Thread.Sleep(2 * 1000); //运行2秒

}

}

/// <summary>

/// System.Timers.Timer的回调方法

/// </summary>

/// <param name="sender"></param>

/// <param name="args"></param>

private static void TimersTimerHandler(object sender,EventArgs args)

{

lock (locko)

{

Console.WriteLine("测试整数:" + TestInt1.ToString());

//睡眠10秒,保证方法重入

System.Threading.Thread.Sleep(300);

TestInt1++;

Console.WriteLine("自增1后测试整数:" + TestInt1.ToString());

}

}

/// <summary>

/// System.Threading.Timer的回调方法

/// </summary>

/// <param name="state"></param>

private static void ThreadingTimerHandler(object state)

{

lock (locko)

{

Console.WriteLine("测试整数:" + TestInt2.ToString());

//睡眠10秒,保证方法重入

System.Threading.Thread.Sleep(300);

TestInt2++;

Console.WriteLine("自增1后测试整数:" + TestInt2.ToString());

}

}

}

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!

原文链接:http://www.cnblogs.com/brainmao/archive/2011/06/02/2069630.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ASP.NET 定时器回调方法的重入 https://www.kuaiidc.com/99113.html

相关文章

发表评论
暂无评论