繁体   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