MAR*_*att -2 c# multithreading
我已经动态创建了线程.
static void Main(string[] args)
{
int ThreadCount =Convert.ToInt32ConfigurationManager.AppSettings["Threads"]);
List<Thread> th = new List<Thread>();
for (int i = 0; i < ThreadCount; i++)
{
Thread t = new Thread(print);
th.Add(t);
}
foreach (Thread t in th)
{
t.Start();
}
}
public static void print()
{
console.writeline("123");
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个线程何时完成.完成这些线程后,我想打印一条"DONE"的消息
我怎样才能做到这一点.
Thread.Join()可以提供帮助; 请参阅http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx.
foreach (var t in th)
t.Join();
Console.WriteLine("DONE");
Run Code Online (Sandbox Code Playgroud)
您可能希望查看更高级别的TPL(任务并行库)API; 请参阅http://msdn.microsoft.com/en-us/library/dd537609.aspx.从长远来看,它可能更容易使用.
var tasks[] = new Task[n];
for (int i = 0; i < n; ++i)
{
tasks[i] = new Task(() => Console.WriteLine(123));
tasks[i].Start();
}
Tasks.WaitAll(tasks);
Console.WriteLine("DONE");
Run Code Online (Sandbox Code Playgroud)
或者在PLINQ中,http://msdn.microsoft.com/en-us/library/dd460688.aspx,(尚未编译代码)
Parallel.ForEach(Enumerable.Range(1, n), i => Console.WriteLine(i));
Console.WriteLine("DONE");
Run Code Online (Sandbox Code Playgroud)