我的线程代码的执行时间不会受到具有Join的线程的影响

KPK*_*KPK 1 .net c# multithreading

我正在我的一个应用程序中创建三个线程.我的要求是创建这三个线程并启动它们的方法不应该返回,除非执行所有这三个线程.

我尝试在所有三个线程上使用Join.但是,我观察到当我使用Join时,我的方法的总执行时间是所有三个线程的执行时间的总和.换句话说,它们是按顺序执行的.

我尝试使用ThreadState,但从MSDN和stackoverflow实现,ThreadState属性应仅用于调试目的,而不是用于实际编码.

我能做到这一点并保持执行并行的最佳方法是什么.

任何想法将不胜感激.提前致谢

Jon*_*eet 5

但是,我观察到当我使用Join时,我的方法的总执行时间是所有三个线程的执行时间的总和.换句话说,它们是按顺序执行的.

这表明你没有正确启动线程,或者它们正在执行阻止它们并行执行的锁定.Join依次调用每个线程是一种等待每个线程完成的简单而有效的方法.

一个错误我想象的是,如果你开始每个线程,并呼吁Join 尽快你已经开始了它,而不是等到你已经开始的所有线程.例如:

// Incorrect code
for (int i = 0; i < 3; i++)
{
     Thread t = new Thread(Task);
     t.Start();
     t.Join();
}
Run Code Online (Sandbox Code Playgroud)

相反,你应该启动所有三个线程然后加入所有线程:

List<Thread> threads = new List<Thread>();
for (int i = 0; i < 3; i++)
{
    Thread t = new Thread(Task);
    t.Start();
    threads.Add(t);
}
foreach (Thread t in threads)
{
    t.Join();
}
Run Code Online (Sandbox Code Playgroud)

这能解释你的问题吗?如果没有,请发布显示您正在做的事情的代码.