Skip to content

Commit 8cb9f97

Browse files
committed
等待线程创建
1 parent 67b2352 commit 8cb9f97

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

test/AsyncWorkerCollection.Tests/AsyncAutoResetEventTests.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public void WaitForSuccessOrResult()
1818
{
1919
"当使用 Set 次数超过 WaitOneAsync 次数,多余的 Set 只被计算一次".Test(() =>
2020
{
21-
Console.WriteLine("当使用 Set 次数超过 WaitOneAsync 次数,多余的 Set 只被计算一次");
2221
// Arrange
2322
var asyncAutoResetEvent = new AsyncAutoResetEvent(false);
2423
var mock = new Mock<IFakeJob>();
@@ -96,11 +95,15 @@ public void WaitForSuccessOrResult()
9695

9796
// Action
9897
var taskList = new List<Task>(10);
98+
// 使用 SemaphoreSlim 让测试线程全部创建
99+
var semaphoreSlim = new SemaphoreSlim(0, 10);
99100
for (var i = 0; i < 10; i++)
100101
{
101102
var task = Task.Run(async () =>
102103
{
103-
await asyncAutoResetEvent.WaitOneAsync();
104+
var t = asyncAutoResetEvent.WaitOneAsync();
105+
semaphoreSlim.Release();
106+
await t;
104107
mock.Object.Do();
105108
});
106109
taskList.Add(task);
@@ -109,11 +112,11 @@ public void WaitForSuccessOrResult()
109112
// 等待 Task 都进入 await 方法
110113
// 如果没有等待,可以都在线程创建上面,此时调用多次的 Set 只是做初始化
111114
// 也就是当前没有线程等待,然后进行多次 Set 方法
112-
foreach (var task in taskList)
115+
for (int i = 0; i < 10; i++)
113116
{
114-
Task.WaitAny(task, Task.Delay(TimeSpan.FromSeconds(1)));
117+
semaphoreSlim.Wait();
115118
}
116-
119+
117120
for (var i = 0; i < 5; i++)
118121
{
119122
asyncAutoResetEvent.Set();

0 commit comments

Comments
 (0)