public static class TaskUtil { /// <summary> /// 多线程执行 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <param name="action"></param> /// <param name="threadNum"></param> public static void Do<T>(List<T> list, Action<T> action, int threadNum) { object o = new object(); int count = list.Count(); int avg = count / threadNum; int yushu = count % threadNum; if (avg == 0) { ThreadStart ts = () => { foreach (var item in list) { action(item); } }; Thread t = new Thread(ts); t.Start(); } else { for (int i = 1; i <= avg; i++) { var tempList = list.Skip((i - 1) * avg).Take(avg).ToList(); if (yushu > 0) { tempList.AddRange(list.Skip(i * avg).Take(yushu)); } ThreadStart ts = () => { foreach (var item in tempList) { //在action中注意锁住非堆里面的内容,因为堆是以线程独享,栈是程序共享 action(item); Console.WriteLine(); } }; Thread t = new Thread(ts); t.Name = "线程" + i; t.Start(); } } } }