多线程和线程池使用
//定义个委托 public delegate string MethodCaller(string name); //返回名字的方法 public string GetName(string name) { System.Threading.Thread.Sleep(10000); return name; } //主程序 public ActionResult Main() { string name = "王五";//输入参数 MethodCaller mc = new MethodCaller(GetName); IAsyncResult result = mc.BeginInvoke(name, null, null); IAsyncResult result1 = mc.BeginInvoke("张三", null, null); IAsyncResult result2 = mc.BeginInvoke("李四", null, null); string myname = mc.EndInvoke(result);//用于接收返回值 string myname1 = mc.EndInvoke(result1);//用于接收返回值 string myname2 = mc.EndInvoke(result2);//用于接收返回值
//线程池,此时GetName方法的参数必须是object state。也就是说 public string GetName(object name){},才可以使用线程池的方法。
//由于线程的创建和销毁需要耗费一定的开销,过多的使用线程会造成内存资源的浪费,出于对性能的考虑,于是引入了线程池的概念。线程池维护一个请求队列,线程
//池的代码从队列提取任务,然后委派给线程池的一个线程执行,线程执行完不会被立即销毁,这样既可以在后台执行任务,又可以减少线程创建和销毁所带来的开销。
//线程池线程默认为后台线程(IsBackground),开启线程池,只需下面一句话即可。
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(GetName),"六"); }
参考文章:http://blog.jobbole.com/89261/