如果多个线程在信号量中抛出异常会发生什么。
假设一个sempahore可以有10个线程可以一次输入,而线程#2,5,6,7,9将抛出异常,然后其他线程不会抛出异常成功运行或者它们被中止。
它是否以某种方式与AggregatedException类相关。
答案 0 :(得分:1)
假设发生异常时其他线程已经在信号量内,它们将成功运行完成。如果您希望它们提前终止,请使用带有SemaphoreSlim的cancellation token对象。
答案 1 :(得分:0)
我不明白你的意思
在信号量中抛出异常
但可能
在释放信号量之前抛出异常
在这种情况下,10组中的其他线程将运行完成而没有任何问题。 如果其他线程随后进入,则可能由于缺乏许可而陷入僵局。
在任何情况下,根据以下方案,信号量,锁等应在finally
块中释放以防止上述情况:
acquire
try
{
risky code
}
finally
{
release
}