请问在C#下多线程的问题
问题: 我现在有一 100条任务要处理,
调用多线程操作,有什么办法限制 同时处理为 10 个线程,别的线程都为等待.
我现在是
用 muxConsole.WaitOne(); //阻塞队列 好像不行
------解决方案--------------------
我恰好有个类似的代码。
思路是先在ThreadPool中放入10个线程,然后等待其中的任何一个执行结束WaitHandle.WaitAny(),WaitOne的返回值正好是ManualResetEvent数组的下标,再补充另一个待执行的线程进入ThreadPool Queue,最后用WaitHandle.WaitAll()等着剩下所有的线程执行结束。
// Append maxEventCount threads
for (int b = 0; b < maxEventCount; b++)
{
string s = string.Format( "{0}.{1}.{2}.{3} ", ipBits[0], ipBits[1], ipBits[2], b);
mrEvents[b] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(MultiThreadTryIp, new State(s, mrEvents[b]) as object);
}
int ipAddCount = maxEventCount;
while (ipAddCount <= byte.MaxValue)
{
int appendTo = WaitHandle.WaitAny(mrEvents);
string s = string.Format( "{0}.{1}.{2}.{3} ", ipBits[0], ipBits[1], ipBits[2], ipAddCount);
ipAddCount++;
//System.Diagnostics.Debug.WriteLine(s);
// ShowFreeThread();
mrEvents[appendTo] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(MultiThreadTryIp, new State(s, mrEvents[appendTo]) as object);
}
WaitHandle.WaitAll(mrEvents);