[英]Is there a way to use the Task Parallel Library(TPL) with SQLDataReader?
[英]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.