如何从多线程c#中读取文本文件

本文关键字:读取 取文本 文件 多线程 | 更新日期: 2023-09-27 18:21:29

我有一个程序,它使用多个线程(300)来查询API。目前,它表现为一个爬行器,每个线程根据它刚刚处理的API调用结果和一个随机参数来确定它的下一个web API调用。

我已经建立了一个参数列表,将"随机参数"从等式中删除,并通过消除由于使用该随机参数而发生的冗余API调用来提高效率。

该列表是一个大约有800万行的文本文件。

理想情况下,我希望在我的主线程中有一个流读取器对象,它将是线程安全的,并且所有(300)其他线程在处理完最后一个线程时都会使用它从文本文件中"getLine",直到文件耗尽。

我有点不知道我应该看什么,任何建议和答案都将不胜感激!

如何从多线程c#中读取文本文件

第一路

    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);
    }