【发布时间】:2014-04-09 13:38:32
【问题描述】:
我有一个使用 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));
}
// ...
}
在 ExecuteMethodCall 发生锁定,直到第一个线程完成后才返回控制。
【问题讨论】:
标签: c# sql multithreading linq-to-sql datacontext