学会了控制线程数量,目前感觉使用c#5.0的新特性灵活性不如之前的线程使用,所以不是很喜欢用新特性,不过也可能是我还没熟悉,等以后熟悉清楚了,再评价好不好,今天先搞一搞控制线程数量
public class TaskTest { public void Test() { List<Task> list = new List<Task>(); TaskFactory taskFactory = new TaskFactory(); for (int i = 0; i < 100; i++) { list.Add(taskFactory.StartNew(this.ClacNum)); if(list.Count>8) { //重新赋值,把未完成的,没有异常的,没有取消的线程任务重新绑定到list list = list.Where(x => !x.IsCompleted && !x.IsCanceled && !x.IsFaulted).ToList(); //等待其中一个线程任务的完成 Task.WaitAny(list.ToArray()); } } } private void ClacNum() { long num = 0; for (int i = 0; i < 1000; i++) { num += i; Thread.Sleep(4); } Console.WriteLine("当前线程:{0},返回值为:{1}", Thread.CurrentThread.ManagedThreadId, num); } }
线程资源可以重复使用,不会新开线程