Какая разница ниже двух способов блокировки? Я сомневаюсь в значении этого способа блокировки как использования метода расширения и хочу понять внутреннюю работу.
public static int DoJob(this MapperClass Mapper)
{
object MyLock = new object();
lock (MyLock)
{
if (Mapper.MapId != null)
{
//Do some Work
}
else
{
//Do something else
}
}
}
Способ вызова:
private void InvokeDoJob(List<MapperClass> Mapper)
{
Mapper.ForEach(item =>
{
item.DoJob();
});
}
и этот InvokeDojob вызывает модель многопоточности.
Подскажите, как будет осуществляться блокировка, и это правильный подход.
Кроме того, какая разница ниже кода делает. Я вижу блокировку только на уровне класса.
class Department
{
Object thisLock = new Object();
int salary;
Random r = new Random();
public Department(int initial)
{
salary = initial;
}
int Withdraw(int amount)
{
lock (thisLock)
{
if (salary >= amount)
{
//Console.WriteLine("salary before Withdrawal : " + salary);
return amount = 10;
}
else
{
return amount = 20;
}
}
}
}