如何从多线程c#中读取文本文件
本文关键字:读取 取文本 文件 多线程 | 更新日期: 2023-09-27 18:21:29
我有一个程序,它使用多个线程(300)来查询API。目前,它表现为一个爬行器,每个线程根据它刚刚处理的API调用结果和一个随机参数来确定它的下一个web API调用。
我已经建立了一个参数列表,将"随机参数"从等式中删除,并通过消除由于使用该随机参数而发生的冗余API调用来提高效率。
该列表是一个大约有800万行的文本文件。
理想情况下,我希望在我的主线程中有一个流读取器对象,它将是线程安全的,并且所有(300)其他线程在处理完最后一个线程时都会使用它从文本文件中"getLine",直到文件耗尽。
我有点不知道我应该看什么,任何建议和答案都将不胜感激!
第一路
public static string GetLineThreadSafe(this StreamReader sr)
{
lock (sr)
{
return sr.EndOfStream ? null : sr.ReadLine();
}
}
第二路
public static IEnumerable<string> GetEnumirator(this StreamReader sr)
{
while (!sr.EndOfStream)
{
yield return sr.ReadLine();
}
}
public static void ProcessParalel(this StreamReader sr, Action<string> action, int threadsCount)
{
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = threadsCount;
Parallel.ForEach(sr.GetEnumirator(), po, action);
}