如果有多个线程在信号量中抛出异常会发生什么?
假设一个信号量可以同时有10个线程进入,如果线程2、5、6、7、9抛出异常,那么不会抛出异常的其他线程是否能够成功运行,还是它们会被终止。
这与AggregatedException类是否有关系呢?
如果有多个线程在信号量中抛出异常会发生什么?
假设一个信号量可以同时有10个线程进入,如果线程2、5、6、7、9抛出异常,那么不会抛出异常的其他线程是否能够成功运行,还是它们会被终止。
这与AggregatedException类是否有关系呢?
假设在异常发生时其他线程已经在信号量中,它们将会成功运行直至完成。如果您想要它们提前终止,请使用一个带有取消令牌的SemaphoreSlim对象。
我不明白你所说的意思是什么:
在信号量中抛出异常
但可能是这样:
在释放信号量之前抛出异常
在这种情况下,组合中的另外10个线程将顺利运行并完成,没有任何问题。如果其他线程随后进入,则由于许可证不足而可能会发生死锁。
无论如何,为了防止上述情况发生,应该在 finally
块中释放信号量、锁等,按照以下方案:
acquire
try
{
risky code
}
finally
{
release
}