[英]C# and multithreading logic
我想要做的是創建一個函數,讀取文件和正則表達式的所有內容。 到目前為止我所做的是創造了一個功能
read_content(string filename);
但在此功能之前,我要求用戶選擇一個目錄,然后讀取其中存在的所有文件名
DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles())
{
save in array
}
我已經開始了一個主題
var t = new Thread(() => read_content(filename));
t.Start();
這一切都運行正常,現在我想讓它成為多線程,現在它的單線程
我希望用戶輸入類似start 10線程,這些線程一次讀取一個文件ultil到達結束
我嘗試在谷歌搜索,但找不到我的需要,我不想要整個代碼只是告訴我邏輯或一些基本代碼,想要自己學習和編碼
編輯:似乎我有更多的投票為線程池,所以贊賞良好的tut鏈接
您可以使用任務並行庫 。
您不應該手動設置線程數量 - 您應該讓系統處理這個問題。 TPL為您完成此任務,因此只需創建任務,它們最終將被執行。 通常,每個核心執行一個任務(但不確定)。
你的代碼可能是這樣的:
DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles()) {
var filename = file.FullName;
new Task(() => {
read_content(filename);
}).Start();
}
注意:您的代碼不會檢查線程何時完成,因此我也沒有將其包括在內。 如果需要,您必須將任務保留在列表中,並檢查任務是否已完成。
您可以使用ThreadPool類並在每個文件上調用File.ReadAlltext
(:
采用
ThreadPool.QueueUserWorkItem(<method>, <obj_arg>);
這將重用線程,不會為每個文件創建線程。 您可以在foreach結束時執行Join。
thread.Join();
您是否考慮過使用C#5的異步功能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.