如果多个线程在信号量的情况下抛出异常怎么办?

时间:2012-09-04 05:32:31

标签: c# multithreading semaphore

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

假设一个sempahore可以有10个线程可以一次输入,而线程#2,5,6,7,9将抛出异常,然后其他线程不会抛出异常成功运行或者它们被中止。

它是否以某种方式与AggregatedException类相关。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我不明白你的意思

  

在信号量中抛出异常

但可能

  

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

在这种情况下,10组中的其他线程将运行完成而没有任何问题。 如果其他线程随后进入,则可能由于缺乏许可而陷入僵局。

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

acquire
try
{
    risky code
}
finally
{
    release
}