我在形成这个问题时遇到了困难,所以我会尝试用几种方式来表述它,这样就不会重复关于静态方法的通常讨论。这可能更多是一个架构问题。
如果静态类上有一个静态成员接受传入的变量,那么如果操作使用率高且运行时间长,是否存在数据冲突/损坏的风险? IE:数据访问类接受对象图类型以持久保存到数据库中。
例如:
namespace MyApp.DAL.People
{
public static class Person
{
public static void Insert(Entities.People.Person p)
{
// ADO.net code, try catch etc, execute to db, call other private method
....
Helper(p);
}
private static void Helper(Entities.People.Person p)
{
// do work...
}
}
}
如果用户“A”启动 Person.Insert(myNewPerson)
调用操作,该过程是否会在用户“B”使用静态类和方法保存其“person 对象”之前完全完成“到数据库。
操作是串行和异步的,本质上是阻塞静态类的使用吗?
如果应用程序(开发人员)尝试在应用程序空间中使用多个线程,这只是一个问题吗?
除非您明确为应用程序启动另一个线程,否则所有内容都在单个线程上运行吗?
顺便说一句,这是我在 SO 上发表的第一篇文章 - 特别感谢所有花时间发布问题/答案的人 - 感谢您的宝贵时间!
最佳答案
如果两个不同的线程同时调用Person.Insert
,它们将同时执行。除非该方法中有一些显式的阻塞。
线程A
在p
参数中传递的数据将无法被线程B
访问。当然,假设这两个线程传递对完全不同的对象实例的引用。
只要 Insert
方法中没有任何内容访问外部范围内的任何内容,调用就是完全安全的。例如,所有方法局部变量对于两个线程来说都是不同的。仅当该方法(或其调用的方法)开始访问外部范围的数据时,您才会开始遇到问题。
关于c# - 接受变量的静态成员会损坏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645770/