现在有5个主线任务,每个任务都要等上一个任务完成才能进行。
每个任务里面也许还有数量不等的子任务,子任务都可以同时进行。 类似于:int[] maintask = new int[5]{100,50,25,25,2};for (int i = 0; i < maintask.length; i++)
{
System.Threading.ThreadPool.QueueUserWorkItem(p =>
{
for (int j = 0; j < maintask[i]; j++)
{
System.Threading.ThreadPool.QueueUserWorkItem(c =>
{
// do....
}); Console.WriteLine("子任务都结束了。退出!");
}
}); Console.WriteLine("子任务都结束了。继续下个主线任务!");
}↑
以上代码意会即可....:)想请教下最好的管理方法。谢谢。
每个任务里面也许还有数量不等的子任务,子任务都可以同时进行。 类似于:int[] maintask = new int[5]{100,50,25,25,2};for (int i = 0; i < maintask.length; i++)
{
System.Threading.ThreadPool.QueueUserWorkItem(p =>
{
for (int j = 0; j < maintask[i]; j++)
{
System.Threading.ThreadPool.QueueUserWorkItem(c =>
{
// do....
}); Console.WriteLine("子任务都结束了。退出!");
}
}); Console.WriteLine("子任务都结束了。继续下个主线任务!");
}↑
以上代码意会即可....:)想请教下最好的管理方法。谢谢。
a.Start();
var b = new Thread(B);
b.Start();
a.Join();
b.Join();
int[] maintask = new int[5] { 100, 50, 25, 25, 2 }; AutoResetEvent mainEvent = new AutoResetEvent(false);
for (int i = 0; i < maintask.Length; i++)
{
System.Threading.ThreadPool.QueueUserWorkItem(p =>
{
//假设当前主任务有10个子任务,新建10个Event对象
int subTaskCount = 10;
AutoResetEvent[] events = new AutoResetEvent[subTaskCount];
for (var ei = 0; ei < events.Length; ei++)
{
events[i] = new AutoResetEvent(false);
}
for (int j = 0; j < subTaskCount; j++)
{
//将Event[j]作为参数传入Thread
//Thread完成后执行Set
System.Threading.ThreadPool.QueueUserWorkItem(ev =>
{
AutoResetEvent evt = ev as AutoResetEvent;
// do....
evt.Set(); },events[j]);
Console.WriteLine("子任务都结束了。退出!");
}
//等待所有子线程完成
if (WaitHandle.WaitAll(events))
{
//通知主线程可继续执行下一任务
mainEvent.Set();
}
}); //等待当前主线程完成
mainEvent.WaitOne(); Console.WriteLine("子任务都结束了。继续下个主线任务!");
}
而是整个for循环做一个线程去处理比较恰当.对于子线程的同步控制,仍然可以参照上面的代码.