首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中使用多线程?

如何在C#中使用多线程?
EN

Stack Overflow用户
提问于 2016-09-03 17:45:48
回答 2查看 82关注 0票数 0

在我的项目中,我不得不在foreach循环中多次做一些事情,我需要等待大约6-7个小时。

例如:我有80个文档要检查=>大约8个小时

代码语言:javascript
复制
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个线程已死时结束。

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

发布于 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)?你的代码看起来像这样:

代码语言:javascript
复制
Parallel.ForEach(docs, doc => {
    if (checkIsValid(doc))
        doThing(doc);
    else
        delete(doc);
});
票数 2
EN

Stack Overflow用户

发布于 2016-09-03 18:02:27

在C#中有多种实现并发的方法,但每种方法所需的时间取决于您拥有的内核数量。'Parallel.ForEach‘是一种选择,也可能是最简单的实现方式,但请注意,它将尝试在可能的情况下破坏您的工作项,并将加快执行速度。

下面的代码是多线程的,但是要小心,80个线程可能太多了。因此,创建任务(线程)时要有适当的考虑

代码语言:javascript
复制
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及更高版本中工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39305508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档