No puede garantizar en .Net que dos Threads se ejecuten en dos núcleos separados. De hecho, tampoco puede garantizar que Threadse ejecutará en un solo núcleo (!) .
Esto se debe a que los subprocesos administrados no son lo mismo que los subprocesos del sistema operativo : un solo subproceso administrado puede usar múltiples subprocesos del sistema operativo para admitirlo. En C #, solo trata directamente con Threads administrados (al menos, sin recurrir a p / invoke para llamar a las funciones de subprocesos de WinAPI, lo que nunca debe hacer) .
Sin embargo, los planificadores de subprocesos .Net y Windows son muy buenos en lo que hacen: no ejecutarían dos subprocesos en un solo núcleo, mientras que un segundo núcleo está completamente inactivo. Por lo tanto, en general, no necesita preocuparse por eso.
t1yt2se ejecuta en diferentes momentos en un orden arbitrario (por ejemplo, es posible quet2comience antest1en algunos modelos).