@@ -27,20 +27,32 @@ public void Timer_Fires_After_DueTime_Ellapses()
27
27
[ Fact ]
28
28
public void Timer_Fires_AndPassesStateThroughCallback ( )
29
29
{
30
+ AutoResetEvent are = new AutoResetEvent ( false ) ;
31
+
30
32
object state = new object ( ) ;
31
33
using ( var t = new Timer ( new TimerCallback ( ( object s ) =>
32
34
{
33
35
Assert . Same ( s , state ) ;
34
- } ) , state , TimeSpan . FromMilliseconds ( 100 ) , TimeSpan . FromMilliseconds ( Timeout . Infinite ) /* not relevant */ ) ) { }
36
+ are . Set ( ) ;
37
+ } ) , state , TimeSpan . FromMilliseconds ( 100 ) , TimeSpan . FromMilliseconds ( Timeout . Infinite ) /* not relevant */ ) )
38
+ {
39
+ Assert . True ( are . WaitOne ( TimeSpan . FromMilliseconds ( MaxPositiveTimeoutInMs ) ) ) ;
40
+ }
35
41
}
36
42
37
43
[ Fact ]
38
44
public void Timer_Fires_AndPassesNullStateThroughCallback ( )
39
45
{
46
+ AutoResetEvent are = new AutoResetEvent ( false ) ;
47
+
40
48
using ( var t = new Timer ( new TimerCallback ( ( object s ) =>
41
49
{
42
50
Assert . Null ( s ) ;
43
- } ) , null , TimeSpan . FromMilliseconds ( 100 ) , TimeSpan . FromMilliseconds ( Timeout . Infinite ) /* not relevant */ ) ) { }
51
+ are . Set ( ) ;
52
+ } ) , null , TimeSpan . FromMilliseconds ( 100 ) , TimeSpan . FromMilliseconds ( Timeout . Infinite ) /* not relevant */ ) )
53
+ {
54
+ Assert . True ( are . WaitOne ( TimeSpan . FromMilliseconds ( MaxPositiveTimeoutInMs ) ) ) ;
55
+ }
44
56
}
45
57
46
58
[ Fact ]
@@ -51,8 +63,7 @@ public void Timer_Fires_After_DueTime_AndOn_Period()
51
63
52
64
using ( var t = new Timer ( new TimerCallback ( ( object s ) =>
53
65
{
54
- count ++ ;
55
- if ( count >= 2 )
66
+ if ( Interlocked . Increment ( ref count ) >= 2 )
56
67
{
57
68
are . Set ( ) ;
58
69
}
@@ -70,8 +81,7 @@ public void Timer_FiresOnlyOnce_OnDueTime_With_InfinitePeriod()
70
81
71
82
using ( var t = new Timer ( new TimerCallback ( ( object s ) =>
72
83
{
73
- count ++ ;
74
- if ( count >= 2 )
84
+ if ( Interlocked . Increment ( ref count ) >= 2 )
75
85
{
76
86
are . Set ( ) ;
77
87
}
@@ -91,8 +101,10 @@ public void Timer_CanDisposeSelfInCallback()
91
101
t . Dispose ( ) ;
92
102
are . Set ( ) ;
93
103
} ) ;
94
- t = new Timer ( tc , null , 1 , - 1 ) ;
104
+ t = new Timer ( tc , null , - 1 , - 1 ) ;
105
+ t . Change ( 1 , - 1 ) ;
95
106
Assert . True ( are . WaitOne ( MaxPositiveTimeoutInMs ) ) ;
107
+ GC . KeepAlive ( t ) ;
96
108
}
97
109
98
110
[ Fact ]
@@ -151,6 +163,7 @@ public void MultpleTimers_PeriodicTimerIsntBlockedByBlockedCallback()
151
163
t . Change ( 1 , 50 ) ;
152
164
153
165
Assert . True ( b . SignalAndWait ( MaxPositiveTimeoutInMs ) ) ;
166
+ GC . KeepAlive ( t ) ;
154
167
}
155
168
156
169
[ Fact ]
0 commit comments