c#多线程处理单线程产生的数据

需求描述:

1.项目启动时创建一个线程一直读取日志文件(目前已经完成);
2.在上一线程中每读200行数就创建一个新的线程处理这200行数据;

问题:由于在Fun1中不断创建线程并调用Fun2,Fun2总是报错为listStr已更改,不知道这样写是否正确

代码: public static void Main(string[] args)

    {
    ThreadPool.QueueUserWorkItem(Fun1)
    }
    
    public void Fun1()
    {
     using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
        {
             using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
            {
                string Line=string.empty;
                List<string> listStr=new List<string>();
                while((line = sr.ReadLine()) != null)
                {
                    if (listStr.Count == 200)
                    {
                        analytickal = new AnalyticalArithmetic();
                        ThreadPool.QueueUserWorkItem(new WaitCallback(Fun2), listStr);
                        listStr.Clear();
                    }
                    listStr.Add(line);
                }
            }
        }
    }
    
    public void Fun2(Object listStr)
    {
    //这个方法处理数据
    }
阅读 3.7k
2 个回答
  1. listStr 传递的是引用,所以这里不论创建多少个线程使用的都是同一个listStr,要么每次重新构建,要么传递listStr.ToArray();

  2. 多线程建议使用Task处理

Fun2不知道处理那部分数据。你每次传入进去的都是同一个List。
解决方案:
1.告诉Fun2应该处理list中哪部分数据。
2.每次重新new一个list给Fun2,然后处理完之后return出来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进