簡體   English   中英

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

[英]How to use Multi-thread in C#?

在我的項目中,我必須在一個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
}

你看過Parallel.ForEach嗎? 您的代碼如下所示:

Parallel.ForEach(docs, doc => {
    if (checkIsValid(doc))
        doThing(doc);
    else
        delete(doc);
});

有多種方法可以在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及更高版本中工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM