代码之家  ›  专栏  ›  技术社区  ›  JaiK

在c中使用线程或队列写入文件#

  •  0
  • JaiK  · 技术社区  · 6 年前

    我有以下代码,它需要很多时间。我想有4个线程从文件中读取ID,然后转储由ConnectToServiceAndDump完成的详细信息。由于所有id都是唯一的,所以我可以用4个线程拾取4个唯一id并调用ConnectToServiceAndDump。 我尝试过线程类将线程数设置为4,但如果我将其保持在while循环中,则无法实现。我还是个线程新手,所以不确定什么是正确的方法。

    或者类似这样的方法:

    //- create a list.. which contains all the ids
    //- create a new thread 
    //- in a theard safe way pop a loan from list    
    //- dump this id by calling service in the same thread 
    //- use ConcurrentQueue(T)  and Enqueue
    
    using (StreamReader sr = new StreamReader($@"{File}"))
    {
        var ids = sr.ReadLine();
        while (ids != null)
        {                                
            ConnectToServiceAndDump(client, ids, outputSubdirectoryName);
            ids = sr.ReadLine();
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Michael Puckett II    6 年前
    var ids = new List<string>();
    using (StreamReader sr = new StreamReader($@"{File}"))
    {
        var id = sr.ReadLine();
        while (id != null)
        {
            ids.Add(id);
            id = sr.ReadLine();
        }
    }
    Parallel.ForEach(ids, (id) => ConnectToServiceAndDump(client, id, outputSubdirectoryName));