C# LINQ到SQL线程安全

C# LINQ到SQL线程安全,c#,multithreading,linq-to-sql,thread-safety,datacontext,C#,Multithreading,Linq To Sql,Thread Safety,Datacontext,我想询问以下代码是否是线程安全的: 考虑将同时执行Save1和Save2。datacontext的线程安全性有问题吗 public class Test1() { private void Save1() { using(TestLinqToSQL obj = new TestLinqToSQL()) { obj.SaveRecord(new Client (){Id = 1, Name =

我想询问以下代码是否是线程安全的: 考虑将同时执行Save1和Save2。datacontext的线程安全性有问题吗

public class Test1()
{
    private void Save1()
    {        
        using(TestLinqToSQL obj = new TestLinqToSQL())
        {        
             obj.SaveRecord(new Client (){Id = 1, Name = "John Doe");
        }
    }

    private void Save2()
    {        
         using(TestLinqToSQL obj = new TestLinqToSQL())
         {        
             obj.SaveRecord(new Client (){Id = 2, Name = "Mike Tyson");
         }
    }         
}



public class TestLinqToSQL : IDisposable
{
    public void SaveRecord(Client newClient)
    {
        using(ClientDatacontext cont = new ClientDatacontext())
        {
            cont.InsertRecord(newClient);
        }        
    }
}

提前感谢

在本例中,不,这不是问题,因为每个线程将获得一个单独的DataContext实例,因为每个方法都会创建一个新实例。如果DataContext在线程之间共享,则会出现问题,因为实例方法不是线程安全的

。你需要对你认为是可接受的和不可接受的事情做更详细的说明。在您的特定情况下,因为每个方法都有一个单独的数据上下文,所以您不必担心其中一个插入正在另一个插入的“中间”,或者以其他方式导致其中一个插入由于对共享资源的非同步访问而完全失败(如果数据上下文在线程之间共享,则可能会出现问题)

然而,插入件的顺序是完全不确定的。如果这些操作的顺序很重要,那么它“不是线程安全的”


此外,如果您正在执行包含“事务”的多个操作,则它可能是“线程安全”的,也可能不是“线程安全”的,这取决于您如何定义线程安全。如果每个方法都插入了5个项,则无法确定所有5个插入都在另一个方法的插入之前或之后(除非您明确添加了一个
锁来确保这一点)。

我不会说“潜在的”“,这实际上肯定是一个巨大的问题。谢谢。你说的实例方法是什么意思?DataContext类上的方法只有在你创建了一个之后才能访问。换句话说,这些方法不是静态的。相关:谢谢。这解决了我的问题。我不在乎插入顺序。