我注意到,根據指示,我的一些服務掛起而不是關閉,因爲他們正在等待其他服務持有的鎖等待它們關閉(造成死鎖)。爲此,我需要一些方法來發出信號等待鎖關閉線程,所以我想出了這個:我怎麼能指示線程停止等待一個Mutex加入後呢?
public static Boolean Lock(this Mutex mutex)
{
Boolean achieved = false;
while (Thread.CurrentThread.ThreadState != System.Threading.ThreadState.StopRequested)
{
try
{
achieved = mutex.WaitOne(TimeSpan.FromSeconds(10.0));
}
catch (AbandonedMutexException exception)
{
// Log this
}
}
return achieved;
}
當每個服務被停止,它要求加入它的每個線程。問題是即使在調用Thread之後,ThreadState仍然被設置爲Running。最終,Join會超時並且線程會中止,但我寧願它不會這樣做。
所以我有兩個問題:
有一些方法的線程知道它已經加入了(因此停止等待)?
有沒有更好的方法來解決這個問題比我在這裏提出的?
你能詳細解釋一下嗎? – 2010-11-04 19:15:48