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

时间:2016-09-03 09:45:48

标签: c# multithreading

在我的项目中,我必须在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
}

2 个答案:

答案 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及以上版本中工作