启用一个新线程和 使用委托.BeginInvoke 有什么区别吗?

时间:2022-12-17 19:45:04
启用一个新线程和 使用委托.BeginInvoke 有什么区别吗?
个人理解:
委托.BeginInvoke 也是开启一个新线程。且Thread能做的 委托也都能做吧。
那还要线程有什么用吗?
请大家指教!

9 个解决方案

#1


BeginInvoke 不是用来起线程的。

#2


具体的细节看这篇blog
http://www.cnblogs.com/healerkx/articles/1521450.html

#3


BeginInvoke  也可以不阻塞主线程。难道他没有启用新线程?
我记得msdn上说 是使用线程池

#4


华丽的飘过

#5


Delegate.BeginInvoke
通过一个委托来进行同步方法的异步调用,Delegate.BeginInvoke方法是从ThreadPool取出一个线程来执行这个方法,以获得异步执行效果的。

#6


请问 , 新开一个线程和从线程池里取出一个线程各有什么优缺点吗?

#7


引用 6 楼 l0f 的回复:
请问 , 新开一个线程和从线程池里取出一个线程各有什么优缺点吗?


个人观点  新开线程用于比较长的程序,
  线程池 用于小片段代码

#8


引用 5 楼 wuyq11 的回复:
Delegate.BeginInvoke
 通过一个委托来进行同步方法的异步调用,Delegate.BeginInvoke方法是从ThreadPool取出一个线程来执行这个方法,以获得异步执行效果的。

up

#9


每个进程都有一个线程池。线程池的默认大小为:每个可用处理器 25 个辅助线程,再加上 1000 个 I/O 完成线程。使用 SetMaxThreads 方法可以更改线程池中的线程数。每个线程使用默认的堆栈大小并按照默认的优先级运行。

创建少量的线程可以用Thread来操作,并人工管理线程,但是如果要创建大量的后台线程,应该使用线程池,它帮我们优化了线程。虽然我们可以自己创建一个线程池,管理自己的线程池,不过最好还是使用进程自己的默认线程池,BeginInvoke就是使用默认线程池的方法。

#1


BeginInvoke 不是用来起线程的。

#2


具体的细节看这篇blog
http://www.cnblogs.com/healerkx/articles/1521450.html

#3


BeginInvoke  也可以不阻塞主线程。难道他没有启用新线程?
我记得msdn上说 是使用线程池

#4


华丽的飘过

#5


Delegate.BeginInvoke
通过一个委托来进行同步方法的异步调用,Delegate.BeginInvoke方法是从ThreadPool取出一个线程来执行这个方法,以获得异步执行效果的。

#6


请问 , 新开一个线程和从线程池里取出一个线程各有什么优缺点吗?

#7


引用 6 楼 l0f 的回复:
请问 , 新开一个线程和从线程池里取出一个线程各有什么优缺点吗?


个人观点  新开线程用于比较长的程序,
  线程池 用于小片段代码

#8


引用 5 楼 wuyq11 的回复:
Delegate.BeginInvoke
 通过一个委托来进行同步方法的异步调用,Delegate.BeginInvoke方法是从ThreadPool取出一个线程来执行这个方法,以获得异步执行效果的。

up

#9


每个进程都有一个线程池。线程池的默认大小为:每个可用处理器 25 个辅助线程,再加上 1000 个 I/O 完成线程。使用 SetMaxThreads 方法可以更改线程池中的线程数。每个线程使用默认的堆栈大小并按照默认的优先级运行。

创建少量的线程可以用Thread来操作,并人工管理线程,但是如果要创建大量的后台线程,应该使用线程池,它帮我们优化了线程。虽然我们可以自己创建一个线程池,管理自己的线程池,不过最好还是使用进程自己的默认线程池,BeginInvoke就是使用默认线程池的方法。