锁定代码区域的正确方法是什么

0x4*_*9D1 5 c# multithreading locking

更好的是:
在lock语句中有大的代码区域

在大区域中有小锁?
这个样本中的交换是不可更改的.

lock (padLock)
{
  foreach (string ex in exchanges)
  {
     sub.Add(x.ID, new Subscription(ch, queue.QueueName, true));
.........
}
Run Code Online (Sandbox Code Playgroud)

要么

foreach (string ex in exchanges)
{
  lock (padLock) 
  {
     sub.Add(x.ID, new Subscription(ch, queue.QueueName, true));
  }
.....
Run Code Online (Sandbox Code Playgroud)

Ole*_*Dok 1

锁越宽,从多线程中获得的就越少,反之亦然。因此,锁的使用完全取决于逻辑。仅锁定发生变化且一次只能由一个线程运行的事物和位置

如果您锁定使用集合sub- 使用较小的锁,但如果您并行运行多个同时foreach循环