簡體   English   中英

如何在.NET中以更好的方式使用並行線程(TPL)

[英]How to use parallel threading (TPL) in a better way in .NET

我正在使用.net Framework 4.0,並且我在服務器的某些位置存儲了許多文本文件。我現在正在做的是將數據從文本文件推送到oracle數據庫。我創建了四個線程來處理文本文件,所有線程訪問不同的文本文件,而不是相同的文件。第三種方法t3應該在第二種t2之后發生,並且只有在完成將四種方法推入數據庫之后,我才根據不同的算法導出數據,這應該在完成四個線程之后發生。所以我在這里有幾個問題

1.我使用的是.net framework 4.0,是否有可能通過使用以下代碼來丟失對數據庫中文件處理的完成。是否有更好的方法

2.任務t2是否會在t3之前發生,是否有丟失文件處理的機會?

static void Main(string[] args)
{
    Task t1 = Task.Factory.StartNew(() => {
        FirstmethodPushtodatabase();
    });
    Task t2 = Task.Factory.StartNew(() => {
        SecondmethodPushtodatabase();
    });
Task.WaitAll(t2);
 Task t3 = Task.Factory.StartNew(() => {
        ThirdmethodPushtodatabase();
    });
 Task t4 = Task.Factory.StartNew(() => {
        FourthmethodPushtodatabase();
    });

    Task.WaitAll(t1, t2,t3,t4);
    Thirdmethod();
    Console.ReadLine();
}

編輯這是最好的嗎? 創建單獨的進程或線程?

您將不會丟失任何將數據推入數據庫的工作。 但是,對任務進行排序的更好方法是使用Task.ContinueWith 您可以在MSDN Task.ContinueWith上閱讀更多內容。

原則上,您可以對t2和t3進行排序

Task t2 = Task.Factory.StartNew(() => {
    SecondmethodPushtodatabase();
}).ContinueWith(
    (t) => {
    ThirdmethodPushtodatabase(); }
);

這將使T4與其他任務同時開始。

暫無
暫無

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

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