锁定任何实例的部分代码
Lock a part of code for any instances
我可以为任何实例锁定部分代码吗?
考虑这个
public bool method1()
{
lock (this)
{
Thread.Sleep(15000);
return true;
}
}
然后在第一个项目中我将其称为:
Assembly testAssembly = Assembly.LoadFile(@"C:\UsersLockTest\ClassLibrary1\bin\Debug\ClassLibrary1.dll");
Type calcType = testAssembly.GetType("ClassLibrary1.Class1");
object calcInstance = Activator.CreateInstance(calcType);
var x = (bool)calcType.InvokeMember("method1",BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,null, calcInstance, null);
Console.WriteLine("First project " + x);
Console.ReadLine();
然后在第二个项目中,我将其命名为上述。
有什么方法可以锁定任何实例的 method1()
吗?我的意思是第一个项目调用 method1,然后第二个项目也调用它。第二个项目必须等到第一个通过锁定。
Is there any way to lock method1() for any instances ?
是的。如果您使 lock
使用的对象成为静态对象,它将在该类型的任何实例中查找它,而不是实例:
private static object globalLock = new object();
public bool Method1()
{
lock (globalLock)
{
Thread.Sleep(15000);
return true;
}
}
请注意,一般来说,锁定 this
实例被认为是不好的做法,因为您无法知道哪些其他对象正在使用您的对象作为锁定机制。这就是为什么通常更喜欢有一个本地的、自包含的对象用作锁的原因。
更多关于 MSDN documentation or in Why is lock(this) {...} bad?。
我可以为任何实例锁定部分代码吗?
考虑这个
public bool method1()
{
lock (this)
{
Thread.Sleep(15000);
return true;
}
}
然后在第一个项目中我将其称为:
Assembly testAssembly = Assembly.LoadFile(@"C:\UsersLockTest\ClassLibrary1\bin\Debug\ClassLibrary1.dll");
Type calcType = testAssembly.GetType("ClassLibrary1.Class1");
object calcInstance = Activator.CreateInstance(calcType);
var x = (bool)calcType.InvokeMember("method1",BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,null, calcInstance, null);
Console.WriteLine("First project " + x);
Console.ReadLine();
然后在第二个项目中,我将其命名为上述。
有什么方法可以锁定任何实例的 method1()
吗?我的意思是第一个项目调用 method1,然后第二个项目也调用它。第二个项目必须等到第一个通过锁定。
Is there any way to lock method1() for any instances ?
是的。如果您使 lock
使用的对象成为静态对象,它将在该类型的任何实例中查找它,而不是实例:
private static object globalLock = new object();
public bool Method1()
{
lock (globalLock)
{
Thread.Sleep(15000);
return true;
}
}
请注意,一般来说,锁定 this
实例被认为是不好的做法,因为您无法知道哪些其他对象正在使用您的对象作为锁定机制。这就是为什么通常更喜欢有一个本地的、自包含的对象用作锁的原因。
更多关于 MSDN documentation or in Why is lock(this) {...} bad?。