По теме: Как перехватывать исключения из ThreadPool.QueueUserWorkItem?
Я обнаруживаю исключения в фоновых потоках, запущенных ThreadPool.QueueUserWorkItem () и распространяют их в основной поток через общую переменную экземпляра.
Фоновые потоки делают это:
try
{
... stuff happens here...
}
catch (Exception ex1)
{
lock(eLock)
{
// record only the first exception
if (_pendingException == null)
_pendingException = ex1;
}
}
Есть несколько потенциальных авторов _pendingException - несколько фоновых потоков, поэтому я защищаю его блокировкой.
В основном потоке, должен ли я снимать блокировку перед чтением _pendingException
? Или я могу просто сделать это:
if (_pendingException != null)
ThrowOrHandle();
РЕДАКТИРОВАТЬ:
ps: Я бы предпочел НЕ блокировать поток читателя, потому что он находится на горячем пути, и я бы очень, очень часто снимал и снимал блокировку.