私はOLTPアプリケーションでスレッドの競合を起こしています。コード関与を検討しながら、私は以下のが見つかりました:あなたはスニペットで見ることができるようにロックブロック内でロックされたオブジェクトを変更します。
lock (_pendingTransactions)
{
transaction.EndPointRequest.Request.Key = (string)MessageComparer.GenerateKey(transaction.EndPointRequest.Request);
if (!_pendingTransactions.ContainsKey(transaction.EndPointRequest.Request.Key))
{
_pendingTransactions.Add(transaction.EndPointRequest.Request.Key, transaction);
return true;
}
else
{
return false;
}
}
、「ロック」ブロック内で変更されたオブジェクトのロックがあります。そこに何か悪いですか?誰もがこのようなことをして問題を抱えていた?