File tree Expand file tree Collapse file tree 1 file changed +8
-5
lines changed
test/AsyncWorkerCollection.Tests Expand file tree Collapse file tree 1 file changed +8
-5
lines changed Original file line number Diff line number Diff line change @@ -18,7 +18,6 @@ public void WaitForSuccessOrResult()
18
18
{
19
19
"当使用 Set 次数超过 WaitOneAsync 次数,多余的 Set 只被计算一次" . Test ( ( ) =>
20
20
{
21
- Console . WriteLine ( "当使用 Set 次数超过 WaitOneAsync 次数,多余的 Set 只被计算一次" ) ;
22
21
// Arrange
23
22
var asyncAutoResetEvent = new AsyncAutoResetEvent ( false ) ;
24
23
var mock = new Mock < IFakeJob > ( ) ;
@@ -96,11 +95,15 @@ public void WaitForSuccessOrResult()
96
95
97
96
// Action
98
97
var taskList = new List < Task > ( 10 ) ;
98
+ // 使用 SemaphoreSlim 让测试线程全部创建
99
+ var semaphoreSlim = new SemaphoreSlim ( 0 , 10 ) ;
99
100
for ( var i = 0 ; i < 10 ; i ++ )
100
101
{
101
102
var task = Task . Run ( async ( ) =>
102
103
{
103
- await asyncAutoResetEvent . WaitOneAsync ( ) ;
104
+ var t = asyncAutoResetEvent . WaitOneAsync ( ) ;
105
+ semaphoreSlim . Release ( ) ;
106
+ await t ;
104
107
mock . Object . Do ( ) ;
105
108
} ) ;
106
109
taskList . Add ( task ) ;
@@ -109,11 +112,11 @@ public void WaitForSuccessOrResult()
109
112
// 等待 Task 都进入 await 方法
110
113
// 如果没有等待,可以都在线程创建上面,此时调用多次的 Set 只是做初始化
111
114
// 也就是当前没有线程等待,然后进行多次 Set 方法
112
- foreach ( var task in taskList )
115
+ for ( int i = 0 ; i < 10 ; i ++ )
113
116
{
114
- Task . WaitAny ( task , Task . Delay ( TimeSpan . FromSeconds ( 1 ) ) ) ;
117
+ semaphoreSlim . Wait ( ) ;
115
118
}
116
-
119
+
117
120
for ( var i = 0 ; i < 5 ; i ++ )
118
121
{
119
122
asyncAutoResetEvent . Set ( ) ;
You can’t perform that action at this time.
0 commit comments