Mus*_*sis 6 .net c# multithreading
这段代码之间是否有任何本质区别:
ThreadStart starter = new ThreadStart(SomeMethod);
starter.Invoke();
Run Code Online (Sandbox Code Playgroud)
还有这个?
ThreadStart starter = new ThreadStart(SomeMethod);
Thread th = new Thread(starter);
th.Start();
Run Code Online (Sandbox Code Playgroud)
或者第一个在当前线程上调用方法,而第二个在新线程上调用它?
SLa*_*aks 13
他们不一样.
调用new ThreadStart(SomeMethod).Invoke()
将使用后期绑定在当前线程上执行该方法.这比慢得多new ThreadStart(SomeMethod)()
,反过来要慢一点SomeMethod()
.
调用new Thread(SomeMethod).Start()
将创建一个新线程(具有自己的堆栈),在线程上运行该方法,然后销毁该线程.
调用ThreadPool.QueueUserWorkItem(delegate { SomeMethod(); })
(你没有提到)将在后台运行该方法的线程池,这是一组由.Net自动管理的线程,您可以在其上运行代码.使用ThreadPool比创建新线程便宜得多.
调用BeginInvoke
(您也没有提及)也将在后台运行该方法的线程池,并将保留有关方法结果的信息,直到您调用EndInvoke
.(打电话后BeginInvoke
,你必须打电话EndInvoke
)
一般来说,最好的选择是ThreadPool.QueueUserWorkItem
.
归档时间: |
|
查看次数: |
212 次 |
最近记录: |