需求描述:
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)
{
//这个方法处理数据
}
listStr 传递的是引用,所以这里不论创建多少个线程使用的都是同一个listStr,要么每次重新构建,要么传递listStr.ToArray();
多线程建议使用Task处理