Я видел следующий код и хотел использовать его для простого действия, которое может выполняться только по одному за раз, и не будет происходить часто (поэтому вероятность появления дважды за раз очень мала, но вы никогда не знаете).
Итак, код:
// class variable
private static object syncRoot = new object();
// in a method:
lock (syncRoot)
{
DoIt();
}
Когда другой поток приходит и хочет выполнить код, как долго он будет ждать, пока не будет снята блокировка? Навсегда, или вы можете как-то установить тайм-аут?
И второе: если метод DoIt()
вызывает исключение, блокировка все еще снята?