我有一个服务应用程序,我希望每个条目/调度都与某种上下文相关联。我注意到,有时当“创建”新线程时,系统似乎只是在重新使用现有线程。
当我创建一个新线程/任务时,是否有一些独特的信息可以表明我是在线程 A 还是线程 B 上(即使 CLR 选择使用相同的线程)?
我有一个服务应用程序,我希望每个条目/调度都与某种上下文相关联。我注意到,有时当“创建”新线程时,系统似乎只是在重新使用现有线程。
当我创建一个新线程/任务时,是否有一些独特的信息可以表明我是在线程 A 还是线程 B 上(即使 CLR 选择使用相同的线程)?
当你创建一个新线程时,它总是会创建一个新线程。
当您使用线程池线程时,您故意不创建新线程,而是重新使用池中的线程。
默认情况下,当您使用Task
它时,将使用线程池线程,除非LongRunning
给出了任务创建/继续选项。
您可以使用它Thread.CurrentThread.ManagedThreadId
来获取当前线程的 ID,但除了用于调试/开发目的之外,您可能不应该依赖它。
一般来说,无论是创建一个新线程还是重用一个新线程,对您的代码来说都无关紧要。如果它确实重要,则表明您的代码有问题,您应该仔细查看您所依赖的内容以及原因。