提问人:Ambareesh 提问时间:10/30/2023 最后编辑:marc_sAmbareesh 更新时间:10/30/2023 访问量:82
当不同线程并行访问方法时,SqlConnection 线程是否安全?
Is SqlConnection thread-safe when methods are accessed in parallel by different threads?
问:
我想知道是每次由多个线程访问该方法时创建的对象,也想知道该方法是否以及该类是否是线程安全的。SqlConnection
SqlConnection
public DataSet GetData( string deptId)
{
using(SqlConnection con = new SqlConnection(connectionString))
{
using(SqlDataAdapter da = new SqlDataAdapter(
"Select * FROM Employee where DeptId='"+deptId+"'",con))
{
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
}
答:
1赞
Theodor Zoulias
10/30/2023
#1
SqlConnection
不是线程安全的,这意味着如果不进行同步,多个线程就不能同时使用此类的实例。
尽管如此,该方法是线程安全的,因为每次调用它时都会创建一个单独的实例。此对象仅由当前线程使用,不由任何其他代码共享。此外,该方法没有副作用。它不会以任何方式更改所包含类型的状态。这是一种通常被声明为静态
的方法。因此,您可以自由地从任意数量的线程并发调用该方法,而无需使用 lock
语句或任何其他形式的同步。GetData
SqlConnection
SqlConnection
GetData
GetData
应该注意的是,线程安全并没有什么特别之处。绝大多数内置 .NET 类都不是线程安全的。Non-thread-safety 是默认值。线程安全的几个 .NET 类(如 System.Collections.Concurrent
命名空间中的集合)被显式记录为线程安全类。如果您正在查看一个类的文档,并且没有找到与线程安全相关的任何内容,则应假定该类不是线程安全的。SqlConnection
评论
where DeptId = @deptId