3

如果多个线程在信号量中抛出异常会发生什么。

假设一个 sempahore 可以有 10 个线程,它们可以一次进入,线程# 2,5,6,7,9 将抛出异常,那么其他不会抛出异常的线程将成功运行或中止。

它是否与 AggregatedException 类有关。

4

2 回答 2

1

假设异常发生时其他线程已经在信号量内,它们将成功运行到完成。如果您希望它们提前终止,请使用带有取消标记的SemaphoreSlim对象。

于 2012-09-04T07:23:14.267 回答
0

我不明白你的意思

在信号量中引发异常

但可能

在释放信号量之前抛出异常

在这种情况下,10 个组中的其他线程将毫无问题地运行完成。如果之后有其他线程进入,它们可能会由于缺少许可而死锁。

在任何情况下,信号量、锁等都应该在一个finally块中释放以防止上述情况,根据以下方案:

acquire
try
{
    risky code
}
finally
{
    release
}
于 2012-09-04T07:25:24.390 回答