No son lo mismo.
Llamar a new ThreadStart(SomeMethod).Invoke()
ejecutará el método en la secuencia actual usando el enlace tardío. Esto es mucho más lento que new ThreadStart(SomeMethod)()
, que a su vez es un poco más lento que SomeMethod()
.
Llamando new Thread(SomeMethod).Start()
creará un nuevo hilo (con su propia pila), ejecutará el método en el hilo y luego destruirá el hilo.
Calling ThreadPool.QueueUserWorkItem(delegate { SomeMethod(); })
(que usted no mencionó) se ejecutará el método en el fondo en el grupo de subprocesos, que es un conjunto de hilos manejados automáticamente por .Net que puede ejecutar código en. Usar ThreadPool es mucho más barato que crear un nuevo hilo.
Llamar a BeginInvoke
(que tampoco mencionó) también ejecutará el método en segundo plano en el grupo de subprocesos, y guardará información sobre el resultado del método hasta que llame al EndInvoke
. (Después de llamar BeginInvoke
, que necesidad llamada EndInvoke
)
En general, la mejor opción es ThreadPool.QueueUserWorkItem
.
En realidad, no está haciendo una pregunta relacionada con la rosca. El meollo de su pregunta es: "¿Qué hace el método Delegate.Invoke?" Responde eso y tendrás tu respuesta. –
En cualquier caso, si tiene acceso, debe olvidar la API de subprocesos e ir a las tareas una :) –