C# 来自多个线程的DataContext.ExecuteMethodCall

C# 来自多个线程的DataContext.ExecuteMethodCall,c#,sql,multithreading,linq-to-sql,datacontext,C#,Sql,Multithreading,Linq To Sql,Datacontext,我使用DBML设置了DataContext,并使用ExecuteMethodCall调用SQL Server数据库上的存储过程 这工作正常,但我发现当我同时调用两个函数(通过BackgroundWorkers)时,第二个线程被阻塞,直到第一个线程完成 有没有办法同时运行多个ExecuteMethodCalls,或者这需要单独的DataContext 函数调用示例: public class MyClass: MyDataContext { public MyClass(string co

我使用DBML设置了DataContext,并使用ExecuteMethodCall调用SQL Server数据库上的存储过程

这工作正常,但我发现当我同时调用两个函数(通过BackgroundWorkers)时,第二个线程被阻塞,直到第一个线程完成

有没有办法同时运行多个ExecuteMethodCalls,或者这需要单独的DataContext

函数调用示例:

public class MyClass: MyDataContext
{
    public MyClass(string connection) : base(connection) 
    {  
    }

    // ...

    [Function(Name = "dbo.get_proposed")]  
    public ISingleResult<Order> get_proposed([Parameter(DbType = "Varchar(20)")] string region)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), region);
        return ((ISingleResult<Order>)(result.ReturnValue));
    }

    [Function(Name = "dbo.get_parent_groups")]
    public ISingleResult<Account> get_parent_groups([Parameter(DbType = "VarChar(40)")] string group_name)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), group_name);
        return ((ISingleResult<Account>)(result.ReturnValue));
    }

    // ...
}
公共类MyClass:MyDataContext { 公共MyClass(字符串连接):基(连接) { } // ... [函数(Name=“dbo.get_proposed”)] 公共ISingleResult get_proposed([参数(DbType=“Varchar(20)”)]字符串区域) { IExecuteResult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod()),region); 返回((IsingResult)(result.ReturnValue)); } [函数(Name=“dbo.get\u parent\u groups”)] 公共ISingleResult获取\u父\u组([参数(DbType=“VarChar(40)”)]字符串组\u名称) { IExecuteResult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod()),组名称); 返回((IsingResult)(result.ReturnValue)); } // ... }
锁定发生在ExecuteMethodCall,在第一个线程完成之前不会返回控件。

您根本不能同时使用
DataContext
。文件没有说这是安全的。除非文档中另有说明,否则对象上的所有并发活动都是不安全的

每个线程使用一个
DataContext