C# Thread.start紧接着Thread.join-有用吗?

C# Thread.start紧接着Thread.join-有用吗?,c#,multithreading,C#,Multithreading,在别人写的项目中,我在很多地方都遇到过这样的代码,我仍然不明白为什么会有人写这样的代码 考虑下面的代码(这段代码是C语言的,但我认为它也适用于许多语言——可能只是语法上的差异,或者可能是类的名称和实现方式——你明白了。) 据我所知,这段代码意味着启动一个线程并运行方法,然后这个线程在不做任何其他事情的情况下等待新启动的线程完成 如果是这样的话,为什么我不直接调用这个方法呢 method() 有人能解释一下我的理解是否正确吗?第一个代码片段的功能是否与第二个相同?通常,您是对的,这不是一件非常有

在别人写的项目中,我在很多地方都遇到过这样的代码,我仍然不明白为什么会有人写这样的代码

考虑下面的代码(这段代码是C语言的,但我认为它也适用于许多语言——可能只是语法上的差异,或者可能是类的名称和实现方式——你明白了。)

据我所知,这段代码意味着启动一个线程并运行
方法
,然后这个线程在不做任何其他事情的情况下等待新启动的线程完成

如果是这样的话,为什么我不直接调用这个方法呢

method()
有人能解释一下我的理解是否正确吗?第一个代码片段的功能是否与第二个相同?

通常,您是对的,这不是一件非常有用的事情

但有时,您可能希望操作在单独的线程上运行,因为它修改或依赖于某些每个线程的状态

函数可能正在处理线程本地数据,或者它可能会调用本机COM代码,COM的线程单元内容是在每个线程的基础上初始化的,因此为了避免调用代码中的更改影响这一点,您可能只需要派生一个新线程来调用函数


当然,在这种情况下,一个小的代码注释解释为什么做了一些看起来毫无用处的事情,可能是个好主意

两段代码在功能上是相同的。Threads案例只是将调用委托给high price。但在某些情况下,它可能会有所帮助:

  • 您的线程有另一个安全上下文,但您希望在默认情况下执行。模拟花费的处理器时间与从池中分配线程的处理器时间几乎相同
  • 您的线程的优先级比当前线程的优先级高(或者在一段时间内低),所以关键的一小部分代码可以在运行时附近执行。对于低优先级,假设等待时间较长(例如,从用户输入)

我觉得你的解释很正确。我支持你。我不认为产生一个新线程并等待它完成有任何意义。正如您所提到的,最好同步调用“方法”。如果多个线程被生成并等待完成,这是有意义的。一般来说,是的,这都是一样的。但是,为了完整起见,可能会有一些细微的差异。比如说,另一个线程可以调用你线程上的中断;没有类似的方法可以“中断”一个方法。或者它是一个过度设计的占位符,用于将来在start和join之间添加的内容:)。
method()