未将ManualResetEvent设置为true

本文关键字:true 设置 ManualResetEvent 未将 | 更新日期: 2023-09-27 17:59:21

 List<ManualResetEvent> doneEventsList = new List<ManualResetEvent>();
 productBuilders.ForEach(productBuilder =>
            {
                doneEventsList.Add(productBuilder.GetDoneEvent());
                CustomThreadPool.getSingletonInstance.QueueUserWorkItem(productBuilder.GetAndMapProduct, new Object());
            });
            WaitHandle.WaitAll(doneEventsList.ToArray());

我对上面的代码有点怀疑,

假设CustomThreadPool具有"Thread"类的21个实例的列表,而"productBuilders"具有3个构造器。在这种情况下,从CustomThreadPool获取的线程计数将为"3"。比方说,如果我没有在3个"GetAndMapProduct"调用中的任何一个中对ManualResetEvent对象设置"Set((/true",那么这3个线程会发生什么。我的意思是,如果我在上面的代码上循环7次,每次获取3个线程,并且没有设置ManualResetEvent,我就不能使用CustomThreadPool类吗?,因为CustomThreadPool假设所有(7*3(线程都忙于工作,并且没有任何空闲线程可分配?;

未将ManualResetEvent设置为true

您没有提供任何代码来表明ManualResetEvent任何方式影响这3个线程。它们唯一会影响的(基于您的代码(是通过调用WaitAll来访问当前线程,根据您提供和描述的内容,这将是一个死锁。

如果您只在同一进程中管理不同的线程,我还建议您使用ManualResetEventSlim(http://msdn.microsoft.com/en-us/library/system.threading.manualreseteventslim.aspx)相反,尤其是如果你在GetAndMapProduct中做的事情相当快的话。但是,现在还不清楚你想要实现什么。