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中设置线程的不同名称来检查这一点.我如何创建和运行线程以确保它是新线程.
编译器不会以这种方式优化您的代码.代码将在新的.NET线程中运行.您的观察方式肯定存在错误.
请注意,.NET线程不一定等同于OS线程:
操作系统ThreadId与托管线程没有固定的关系,因为非托管主机可以控制托管和非托管线程之间的关系.具体而言,复杂的主机可以使用CLR Hosting API针对同一操作系统线程调度许多托管线程,或者在不同操作系统线程之间移动托管线程.
理论上,您可以看到两个具有相同Windows线程ID的托管线程,但该Thread.Name属性仍然不同(假设您最初将名称设置为两个不同的值).
如果您可以发布您在错误的线程中观察到某些内容时使用的代码,则可能会发现您所犯的错误.
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |