SqlConnection与并行编程

Ren*_*shi 5 task-parallel-library c#-4.0

这是我现有的代码,它将一些数据保存到多个表中

using (SqlConnection conn = new SqlConnection("myConnString"))
{
   DoWork1(conn);
   DoWork2(conc);
   DoWork3(conn);
}
Run Code Online (Sandbox Code Playgroud)

为了加快我的代码,所以我尝试获得.net TPL支持,我重新改变了我的代码,如下所示

using (SqlConnection conn = new SqlConnection("myConnString"))
{
   ParallelOptions pw = new ParallelOptions();
   pw.MaxDegreeOfParallelism = Environment.ProcessorCount;

   Parallel.Invoke(pw,()=> DoWork1(conn),()=> DoWork2(conc),()=> DoWork3(conn));
} 
Run Code Online (Sandbox Code Playgroud)

但这会从我的数据访问层中的ExecuteNonQuery()方法中抛出一个内部连接致命错误异常.我的并行方法是错误的吗?

Jon*_*eet 8

那么,有办法可能潜在作出使用工作MARS -但我会建议不同的方法.(我不知道MARS是否支持跨多个线程使用相同的连接,即使它允许多个并发操作.)

不要试图在所有并行任务中重用一个连接,而是让每个任务打开(并关闭)一个自身的连接,让连接池处理效率方面.无论你是否使用并行性,这都是.NET的一般最佳实践:打开连接,做一些工作,关闭连接.