在我的项目中,我不得不在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个文档同时签入,并且foreach循环将在80个线程已死时结束。
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
}发布于 2016-09-03 17:50:38
你有没有看过Parallel.ForEach(https://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.foreach(v=vs.110%29.aspx)?你的代码看起来像这样:
Parallel.ForEach(docs, doc => {
if (checkIsValid(doc))
doThing(doc);
else
delete(doc);
});发布于 2016-09-03 18:02:27
在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及更高版本中工作
https://stackoverflow.com/questions/39305508
复制相似问题