日期:2014-05-18  浏览次数:21127 次

请问,关于线程池的WaitCallback委托
“线程池”是可以用来在后台执行多个任务的线程集合。
对于ThreadPool.QueueUserWorkItem 方法,我的理解,就是在线程池中,使用一个线程来异步执行方法。参数是WaitCallback 委托所代表的方法,就是准备异步执行的那个方法吧

而对于WaitCallback 委托的MSDN解释是这样的:WaitCallback 委托:表示线程池线程要执行的回调方法(MSDN)。

怎么又说成是回调方法啊,异步执行的方法和回调方法,可不是一样的哦。MSDN的这种解释,容易让初学者迷糊吧


是不是我的理解错了呢 ?

------解决方案--------------------
“线程池”是可以用来在后台执行多个任务的线程集合。
对于ThreadPool.QueueUserWorkItem 方法,我的理解,就是在线程池中,使用一个线程来异步执行方法。参数是WaitCallback 委托所代表的方法,就是准备异步执行的那个方法吧

这是没错的。

而对于WaitCallback 委托的MSDN解释是这样的:WaitCallback 委托:表示线程池线程要执行的回调方法(MSDN)。

这也是没错的。

怎么又说成是回调方法啊,异步执行的方法和回调方法,可不是一样的哦。MSDN的这种解释,容易让初学者迷糊吧

关键点在于“异步执行的方法”的执行时间,MSDN之所以说是回调方法是有前提的,在你使用ThreadPool.QueueUserWorkItem 的时候,并不总是能保证当前有可供分配的线程,没有的话就需要等待
从这个角度来说 WaitCallback 就是回调方法。

是否是回调方法 要看方法的执行时间点
------解决方案--------------------
打个比方,你去csdn夜总会去叫小姐,你跟妈妈桑说“我要叫个小姐来进行xxxxx事情”,这就是QueueUserWorkItem。这时候你就可以干别的事情去了,小姐随后会自动找你开始xxxxx事情的。

你QueueUserWorkItem 的时候根本没有得到另外一个线程,那当然还是在原来的线程中。所以这叫做“注册”而不是“使用”。