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

Posted

技术标签:

【中文标题】在 C# 中使用线程或队列写入文件【英文标题】:Writing to a File using threading or queue in c# 【发布时间】:2018-09-20 03:02:01 【问题描述】:

我有以下代码,它需要花费大量时间。我想有 4 个线程从文件中读取 id,然后转储由 ConnectToServiceAndDump 完成的详细信息。因为所有 id 都是唯一的,所以我可以用 4 个线程拿起 4 个唯一 id 并调用 ConnectToServiceAndDump。 我已经尝试过 Threading 类将线程数设置为 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();
    

【问题讨论】:

读入所有的 id,然后使用Parallel.ForEach 或者只是简单的任务来排队所有的工作? 【参考方案1】:
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));

【讨论】:

谢谢迈克尔。它起作用了。在其中添加了新的 ParallelOptions MaxDegreeOfParallelism = 4 。

以上是关于在 C# 中使用线程或队列写入文件的主要内容,如果未能解决你的问题,请参考以下文章

在python中使用线程时如何保留文件写入顺序

C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题

是否存在多个读取或写入线程的无锁队列?

在 UI 或后台线程上写入文件 [重复]

练习题,使用多线程编写一个简单的文本处理工具

C# - 将数据写入流 + 使用另一个流读取数据