【发布时间】:2012-01-27 16:51:34
【问题描述】:
当启动另一个 .Net 线程时,是否可以检查它当前是否被阻塞(例如发生同步 I/O)?我不想使用超时等,我只想(从原始/调度线程)知道它(目标/调度线程)是在其工作中进行还是当前处于暂停状态。
这可能吗?
【问题讨论】:
-
这毫无意义。什么时候没有阻塞线程?
标签: .net multithreading concurrency threadpool
当启动另一个 .Net 线程时,是否可以检查它当前是否被阻塞(例如发生同步 I/O)?我不想使用超时等,我只想(从原始/调度线程)知道它(目标/调度线程)是在其工作中进行还是当前处于暂停状态。
这可能吗?
【问题讨论】:
标签: .net multithreading concurrency threadpool
您的问题是基于错误的区分。如果线程正在执行同步 I/O,那么它正在其工作中进行。假设它不包含某种错误,那么线程只会在同步 I/O 上阻塞,如果这是该线程在其正在执行的工作中进行的方式。所以无论线程是否被阻塞,它都在进行它正在做的工作。 (如果线程有问题,无论它是否被阻塞,它都可能不会在它正在做的工作中取得进展。)
你没有解释你的外部问题——你为什么认为你需要这些信息以及你打算用它做什么。但无论您的实际问题是什么,都可能有解决方案,而且它可能与询问另一个线程的状态无关。
原则上,一个线程不应该关心另一个线程在做什么,因为这会违反分层。从特定线程的角度来看,该线程未完成的任何事情都由进程完成,并且没有理由一个线程应该确切地关心进程如何选择完成其他工作,无论是由某个特定的其他线程完成,还是一组线程,另一个进程,或其他任何东西。线程应该关心他们正在做的工作以及其他事物所做的工作,而不是其他事物如何完成其他工作的细节。
【讨论】:
您可以检查工作线程的Thread.ThreadState 属性。它不会给你太多细节,但总比没有好。
【讨论】: