【发布时间】:2011-07-19 02:07:33
【问题描述】:
我的代码是
public static void Invoke(Action[] Actions)
{
Thread[] threadArray = new Thread[Actions.Length];
for (int i = 0; i < Actions.Length; i++)
{
threadArray[i] = new Thread(() =>
{
Actions[i].Invoke();
});
threadArray[i].Start();
}
}
public static void WaitAll()
{
}
public static void WaitAny()
{
}
我想等待所有线程完成,并在任何线程完成时收到通知,
点赞WaitAny、WaitAll
但是等待句柄只能在线程池上使用,找不到任何在单线程上使用的例子。
我的应用程序需要很多线程,数百个,theadpool 有最大线程限制,其余任务排队。
我该如何处理?
更新:这是代码,如果有更好的代码,请告诉我。
public class ParallelV2
{
static int waitcount = 0;
static WaitHandle[] waitHandles;
public static void Invoke(Action[] Actions)
{
waitcount = Actions.Length;
Thread[] threadArray = new Thread[Actions.Length];
waitHandles = new WaitHandle[Actions.Length];
for (int i = 0; i < Actions.Length; i++)
{
var count = i;
waitHandles[count] = new AutoResetEvent(false);
threadArray[count] = new Thread(() =>
{
Actions[count].Invoke();
((AutoResetEvent)waitHandles[count]).Set();
});
threadArray[count].Start();
}
}
public static void WaitAll()
{
while (waitcount > 0)
{
WaitHandle.WaitAny(waitHandles);
waitcount--;
}
}
public static void WaitAny()
{
WaitHandle.WaitAny(waitHandles);
}
}
【问题讨论】:
-
但是你实际上是在这里创建一个线程池。
标签: c# .net windows multithreading parallel-processing