在多线程中创建一个类的多个实例

时间:2018-01-21 01:14:51

标签: c# multithreading

我想知道,如何为每个线程创建一个类的单独实例。

例如,我使用线程处理记录集。考虑1000条记录和5条线程。每个线程应处理200条记录并写入5个文本文件。第一个线程应该写入file1,第二个线程应该写入file2,依此类推......我如何知道当前正在运行的线程以及如何写入正确的文件。 文件处理和数据处理在一个类中,线程调用在另一个类中。如果我创建5个线程,每个线程应该拥有它自己的类。创建第二个线程时,第一个线程将断开连接。也就是说,只有一些数据被写入file1,一旦创建了第二个文件,它就不会将剩余数据写入第一个。始终最后一个文件包含所有数据,其他文件只有很少的记录。

请任何帮助。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可能需要考虑将工作分成线程的不同方法。类和线程之间没有相关性,因此有很多方法可以构建代码以多线程方式工作,我建议采用如下方法:

// Use a queue to allow the 5 threads to pull the next record
var workItems = new ConcurrentQueue<Record>();

// Add your 1000 Records to workItems queue

// Start 5 workers to process the Records in the queue
Parallel.ForEach(Enumerable.Range(0,5), index =>
{
    // Create a separate file for each thread to work with
    var fileName = string.Format("outputFile_{0}.txt", index);

    using (var outputStream = new StreamWriter(fileName))
    {
        // Dequeue Records from the queue until they're all processed
        while (!workItems.IsEmpty)
        {
            Record record;
            if (workItems.TryDequeue(out record))
            {
                // Process each record and write to the file
                var result = ProcessRecord(record);
                outputStream.Write(result);
            }
        }
    }
})