C#和多线程逻辑
本文关键字:多线程 | 更新日期: 2023-09-27 18:21:43
我要做的是创建一个函数,读取文件的所有内容并正则表达式。到目前为止,我所做的是创建一个函数
read_content(字符串文件名);
但在这个功能之前,我要求用户选择一个目录,然后读取中存在的所有文件名
DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles())
{
save in array
}
我已经启动了一个线程
var t = new Thread(() => read_content(filename));
t.Start();
这一切都很好,现在我想让它多线程,现在它的单线程
我希望用户输入类似于启动10个线程的命令,这些线程一次读取一个文件ultil到达结束
我试着在谷歌上搜索,但找不到我需要的东西,我不想要整个代码,只是告诉我逻辑或一些基本代码,想在我自己的上学习和编码
编辑:似乎我对线程池有更多的投票权,所以如果能链接到好的教程,将不胜感激
您可以使用任务并行库。
你不应该手动设置线程中的数量——你应该让系统来处理这个问题。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 的异步功能