KPK*_*KPK 1 .net c# multithreading
我正在我的一个应用程序中创建三个线程.我的要求是创建这三个线程并启动它们的方法不应该返回,除非执行所有这三个线程.
我尝试在所有三个线程上使用Join.但是,我观察到当我使用Join时,我的方法的总执行时间是所有三个线程的执行时间的总和.换句话说,它们是按顺序执行的.
我尝试使用ThreadState,但从MSDN和stackoverflow实现,ThreadState属性应仅用于调试目的,而不是用于实际编码.
我能做到这一点并保持执行并行的最佳方法是什么.
任何想法将不胜感激.提前致谢
但是,我观察到当我使用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)
这能解释你的问题吗?如果没有,请发布显示您正在做的事情的代码.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |