簡體   English   中英

C#和多線程邏輯

[英]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.

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