我有一个外部库,我的代码调用它有时会永久挂起(但仅限于生产!)。我将挂起的部分放入一个单独的线程,所以我可以杀死它并再次尝试使用以下内容超时,但它在调用abort时似乎挂起:
var triesLeft = 5;
while (triesLeft > 0)
{
var mre = new ManualResetEvent(false);
var t = new Thread(_ => {
MethodThatHangsForever10PercentOfTheTime();
mre.Set();
});
t.start();
if (mre.WaitOne(TimeSpan.FromMinutes(20)))
{
break; // Success!
}
triesLeft--;
log("this prints once");
t.abort();
log("this never prints");
}
}
生成的线程是否可能导致主线程在调用abort时挂起?