问题:
我试图从 ThreadPool 中抛出 6 个线程来处理单个任务。每个任务的 ManualResetEvent 都存储在手动复位事件数组中。线程数对应于 ManualResetEvent Array 中的索引。
现在发生的情况是,一旦我启动了这 6 个线程,我就会离开并等待线程完成。等待线程在主线程中完成。
现在有时会发生的是,即使经过很长时间(我见过的 2 天),我的等待逻辑也不会返回。这是线程等待逻辑的代码示例
foreach (ManualResetEvent whandle in eventList)
{
try
{
whandle.WaitOne();
}
catch (Exception) { }
}
根据 .WaitOne 的文档。如果未从线程接收到 Set 事件,则同步调用使线程不返回。
有时我的线程工作量较少,它们甚至可能在我到达等待逻辑之前返回。.WaitOne() 是否有可能会等待 Set() 事件,即使它是过去收到的?这是等待所有线程关闭的正确逻辑吗?