関連: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:リーダースレッドはホットパス上にあるため、ロックを取得したくないので、ロックを頻繁に取得および解放します。