如何在新线程中强制执行

Cod*_*Ars 2 .net c# multithreading

我的应用程序中有这样的代码:

var t = new Thread(new ThreadStart(new Action(SomeClass.SomeMethod)));
t.Start();
...
t.Join();
Run Code Online (Sandbox Code Playgroud)

但据我所知,编译器进行了一些优化,并在与主代码相同的线程中运行SomeMethod.我通过在t和Thread.CurrentThread中设置线程的不同名称来检查这一点.我如何创建和运行线程以确保它是新线程.

Mar*_*ers 5

编译器不会以这种方式优化您的代码.代码将在新的.NET线程中运行.您的观察方式肯定存在错误.

请注意,.NET线程不一定等同于OS线程:

操作系统ThreadId与托管线程没有固定的关系,因为非托管主机可以控制托管和非托管线程之间的关系.具体而言,复杂的主机可以使用CLR Hosting API针对同一操作系统线程调度许多托管线程,或者在不同操作系统线程之间移动托管线程.

理论上,您可以看到两个具有相同Windows线程ID的托管线程,但该Thread.Name属性仍然不同(假设您最初将名称设置为两个不同的值).

如果您可以发布您在错误的线程中观察到某些内容时使用的代码,则可能会发现您所犯的错误.