找出是否有另一个.Net线程被阻止?

时间:2011-12-25 19:16:03

标签: .net multithreading concurrency threadpool

当启动另一个.Net线程时,是否可以检查它是否当前被阻止(例如同步I / O发生)?我不想使用超时等,我想要的是(从原始/调度线程)知道它(目标/调度线程)是在进行中还是当前处于保持状态。

这可能吗?

2 个答案:

答案 0 :(得分:3)

您的问题基于错误的区分。如果线程正在进行同步I / O,那么它的工作正在进行中。假设它不包含某种类型的错误,那么该线程将仅阻止同步I / O,如果这是该线程在其正在进行的工作中前进的方式。因此,无论线程是否被阻止,它正在进行的工作中取得进展。 (如果线程有问题,它可能无法正在进行的工作,无论它是否被阻止。)

您没有解释您的外部问题 - 为什么您认为您需要此信息以及您打算如何处理它。但是,对于你的实际问题,可能有一个解决方案,它可能与询问另一个线程的状态无关。

原则上,线程不应该关心另一个线程正在做什么,因为这将是一个分层违规。从特定线程的角度来看,该线程未完成的任何事情都是由该进程完成的,并且没有理由一个线程应该完全关心进程如何选择完成其他一些工作,无论是通过某个特定的其他线程,一组线程,另一个进程,或其他什么。线程应该关心他们正在做的工作以及其他事情所做的工作,而不是关于其他工作如何工作的细节。

答案 1 :(得分:2)

您可以检查工作线程的Thread.ThreadState属性。它不会给你太多细节,但总比没有好。