我想从ThreadPool中抛出6个线程来处理单个任务。每个任务的ManualResetEvent存储在一个手动重置事件数组中。线程数对应于ManualResetEvent数组中的索引。
现在发生的是,一旦我启动了这6个线程,我就移出并等待线程完成。等待线程在主线程中完成。
现在有些时候会发生什么,即使经过很长时间(我已经看到2天),我的等待逻辑也不会返回。这里是线程等待逻辑的代码示例
foreach (ManualResetEvent whandle in eventList)
{
try
{
whandle.WaitOne();
}
catch (Exception) { }
}
根据.WaitOne的文档。这是同步调用,如果没有收到线程的Set事件,线程将不会返回。
有时我的线程工作量较少,甚至可能在我到达Wait逻辑之前返回。是否有可能.WaitOne()将等待Set()事件,即使它在过去被接收? 这是一个等待所有线程关闭的正确逻辑吗?
你不应该忽略所有例外。如果你真的需要忽略一个特定的异常,那就忽略它,没有别的。 – svick 2013-04-20 15:58:30
另外,你为什么不使用TPL'Task's?他们让事情变得更简单。 – svick 2013-04-20 16:00:05