по теме: How to catch exceptions from a 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();
EDIT:
пс: Я бы предпочел, чтобы НЕ взять замок на читателя нить, потому что он находится на пути горячей, и я бы принимать и очень часто освобождая замок.
Ваше описание zdnet не так ли? – Spence
Вы делаете что-нибудь, за исключением того, что прошло? Или вы могли бы использовать bool, чтобы отметить, что произошла ошибка? –
zdnet? Нет.Я даже не знаю, что это. Умм, арендатор ... я использую исключение ... ну да. Я реконструирую его из основного потока. – Cheeso