各种异步操作的实现方式
时间:2011-03-24 来源:DCBI
总结对比各种异步操作的实现方式
实现异步,主要包含以下几种方法
1) 使用专用线程,方法为:
System.Threading.ThreadStart ts = new System.Threading.ThreadStart(void(object state) target);
System.Threading.Thread th = new System.Threading.Thread(ts);
ts.Start();
调用Start()方法之前,并没有实质性得创建线程资源,而是Start()后才进行创建,此种方式的好处在于能设置线程是前台线程还是后台线程,并且能控制线程的挂起和消亡
2) 使用线程池中的线程
线程是一种比较宝贵的资源,所以使用的时候就要加倍珍惜,线程池中线程在使用完成之后并不是马上销毁,而是回到池中等待下一次的使用,这样就可以较少线程创建的消耗。使用方法如下:
ThreadPool.QueueUserWorkItem(WaitCallback callback)
需要注意的是此种方法使用的均为后台线程
3) 使用异步编程模型 【基于事件的异步模式】
这种方法是MS推荐的使用方法,该模型普遍格式为:
BeginXXX(…IAsyCallBack callback,object asyState);
EndXXX(IAsyState ar);
这种模型的好处上面已经有所阐述
4) 使用BackgroundWorker [很弱]
.Net2.0下提供了BackgroundWorker,使用它可以轻易的完成异步操作,并且它还有一些功能上的加强,比如取消操作
Control类上的异步调用BeginInvoke并没有开辟新的线程完成委托任务,而是让界面控件的所属线程完成委托任务的。看来异步操作就是开辟新线程的说法不一定准确。
http://www.youku.com/playlist_show/id_1803099.html MIT算法