在我的项目中,我必须在foreach循环中做很多次,我需要等待大约6-7个小时。
例如:我有80个文档要检查=>大约8个小时
foreach (var doc in docs)
{
bool valid = checkIsValid(doc); // about 2 min per doc
if (vaid)
{
doThing(doc); // about 5 min per doc
}
else
{
delete(doc); // about 20s per doc
}
}
所以,我认为可以在运行上述代码的同时检查这些内容,而我有很多资源没有使用。我发现C#具有多线程功能(我不知道它能提供什么)。
我可以在我的项目中使用它吗?如何在我的项目中使用它?
理想:80个文档同时进行检查,当80个线程死亡时,foreach循环将完成。
foreach (var doc in docs)
{
//new thread start
bool valid = checkIsValid(doc); // about 2 min per doc
if (vaid)
{
doThing(doc); // about 5 min per doc
}
else
{
delete(doc); // about 20s per doc
}
//thread die
}
答案 0 :(得分:2)
你看过Parallel.ForEach了吗?您的代码如下:
Parallel.ForEach(docs, doc => {
if (checkIsValid(doc))
doThing(doc);
else
delete(doc);
});
答案 1 :(得分:1)
在C#中有多种方法可以实现并发,但每种方法所花费的时间取决于您拥有的核心数。 ' Parallel.ForEach' 是一种选择,可能是最简单的实现方式,但请注意,它会尽可能地破坏您的工作项并加快执行速度。
以下代码是多线程但要注意80个线程可能是一个过度杀伤。因此,需要适当考虑创建任务(线程)
foreach (var doc in docs)
{
//new thread start
bool valid = checkIsValid(doc); // about 2 min per doc
if (vaid)
{
Task.Factory.StartNew(() => doThing(doc);
}
else
{
delete(doc); // about 20s per doc
}
//thread die
}
任务在框架4及以上版本中工作