我有一个需要处理的10个项目的列表,每个项目都使用一个单独的线程。代码应该是这样的:
foreach (Item item in items)
{
Thread t = new Thread(() =>
{
ProcessItem(item);
});
t.Start();
}
我还需要暂停线程(1秒减去执行线程所花费的时间)。在这种情况下我应该使用Thread.Sleep吗?
答案 0 :(得分:5)
如果您不介意跳过线程的手动处理,则以下行应该完全符合您的要求:
Parallel.ForEach(items, ProcessItem);
或在处理之前睡觉(虽然这没有多大意义):
Parallel.ForEach(items, item => { Thread.Sleep(1000); ProcessItem(item); });
答案 1 :(得分:0)
您将使用Thread.Join
等待其他线程完成其工作。
Thread.Sleep
基本上会等待指定的毫秒
Thread.Sleep
确实有副作用,不推荐使用。
您需要注意的一些要点:
items
的数量增加?)也可以查看ThreadPooling
和thread-safe
操作。
答案 2 :(得分:0)
启动线程的代码看起来很好。
您必须使用Thread.Sleep(duration in milliseconds)
让线程暂停一段时间。
Join
将暂停当前线程,直到您加入的线程未完成其处理。
答案 3 :(得分:0)
如果由于某种原因您不想使用Parallel.ForEach
,请使用以下内容:
Thread[] threads = new Thread[10];
int count = 0;
foreach (Item item in items)
{
Thread t = new Thread(() =>
{
ProcessItem(item);
});
t.Start();
threads[count++]=t;
}
for (int i=0;i<10;++i)
threads[i].Join();
答案 4 :(得分:0)
使用Thread.Sleep
。
Thread.Sleep和Thread.Join是不同的东西。
Thread.Sleep
阻止(停止)当前线程一段时间。
Thread.Join
阻止(停止)当前线程,直到调用Join
的线程结束。
另外,请考虑使用Parallel.ForEach作为@nvoigt建议。