【发布时间】:2018-07-31 13:36:22
【问题描述】:
我编写了这段代码作为概念验证,以检查我在当前项目中试验的问题。
var sleeper = new AutoResetEvent(false);
sleeper.Set();
sleeper.Set();
sleeper.Set();
var ix = 0;
while(true) {
sleeper.WaitOne();
Console.Write(ix++);
}
令人惊讶的是(至少对我而言)我没有得到预期的结果。
我希望在控制台中打印012,但只打印0。
- 我误会了什么?
- 哪种方法可能是解决此问题并获得预期结果的最佳方法?
【问题讨论】:
-
当
AutoResetEvent已经处于信号状态时,调用Set()不会执行任何操作。你可能想看看使用Semaphore或SemaphoreSlim来保持这样的计数。
标签: c# .net multithreading synchronization