这段代码有什么本质区别吗:
ThreadStart starter = new ThreadStart(SomeMethod);
starter.Invoke();
还有这个?
ThreadStart starter = new ThreadStart(SomeMethod);
Thread th = new Thread(starter);
th.Start();
或者第一个在当前线程上调用方法,而第二个在新线程上调用它?
最佳答案
它们不一样。
调用 new ThreadStart(SomeMethod).Invoke()
将使用后期绑定(bind)在当前线程上执行该方法。这比 new ThreadStart(SomeMethod)()
慢得多,后者又比 SomeMethod()
慢一点。
调用 new Thread(SomeMethod).Start()
将创建一个新线程(有自己的堆栈),在线程上运行方法,然后销毁线程。
调用 ThreadPool.QueueUserWorkItem(delegate { SomeMethod(); })
(你没有提到)将在线程池的后台运行该方法,线程池是一组自动线程由 .Net 管理,您可以在其上运行代码。使用 ThreadPool 比创建新线程便宜得多。
调用 BeginInvoke
(您也没有提到)也会在线程池的后台运行该方法,并将保留有关该方法结果的信息,直到您调用 结束调用
。 (在调用 BeginInvoke
之后,您必须调用 EndInvoke
)
一般来说,最好的选择是ThreadPool.QueueUserWorkItem
。
关于c# - .NET 线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450693/