c# - 您如何跟踪线程/线程上下文?

标签 c# multithreading f#

我有一个服务应用程序,我希望每个条目/调度都与某种上下文相关联。我注意到,尽管有时当“创建”新线程时,系统似乎只是在重新使用现有线程。

当我创建一个新的线程/任务时,是否有一些我可以获得的唯一信息表明我是在线程 A 上还是在线程 B 上(即使 CLR 选择使用相同的线程)?

最佳答案

当您创建一个新线程时,它总是会创建一个新线程。

当您使用线程池线程时,您有意不创建新线程,而是重新使用池中的线程。

当您使用 Task 时,默认情况下,它将使用线程池线程,除非指定了 LongRunning 任务创建/继续选项。

您可以使用 Thread.CurrentThread.ManagedThreadId 获取当前线程的 ID,但除了用于调试/开发目的之外,您可能不应该依赖它。

一般来说,创建新线程还是重新使用线程对您的代码来说无关紧要。如果它确实很重要,则表明您的代码有问题,您应该仔细查看您所依赖的内容以及原因。

关于c# - 您如何跟踪线程/线程上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15683505/

相关文章:

c# - 如何使用 Windows 8 文本服务框架注册 C# 文本服务?

c# - 在不阻塞的情况下防止一个线程上出现多个 MessageBox

Java:对枚举数组的最终引用是不可变的吗?

f# - 接口(interface)与功能记录

c# - 为什么从另一个线程更新控件的某些属性是安全的?

c# - 如何在 lambda 表达式 mvc 中使用 select many

asynchronous - 如何确保 Async.StartChild 在继续之前已启动?

F# 铁路编程 这个初始化可以改进吗?

c - 蒙特卡罗 pi 近似的并行化

android - 如何在 Android 的后台线程上运行代码?