如果我从多个线程调用一些数据访问方法,我是否需要锁定数据库调用周围的代码以确保一致性,或者 using 语句是否是原子的?
public static DataRow GetData(Int32 id)
{
using (SqlConnection con = new SqlConnection(connectionString);)
{
con.Open();
SqlCommand cmd = ...
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(...)
cmd.Parameters.Add(...)
DataTable dt = new DataTable();
return new SqlDataAdapter(cmd).FillWithRetry(dt, sqlGetEmail.CommandText);
}
}
我认为一个线程不会影响另一个线程定义和“使用中”的连接对象。
最佳答案
Using 语句与线程安全(或缺乏)无关。
它们只是确保在 block 结束时调用所用对象的 Dispose
方法;但在其他方面等同于手动 try..finally Dispose
。
在这种特殊情况下:由于在每个线程上都打开了一个新 连接,因此它是“线程安全的”。它仍然可能不是原子的。数据库或其他共享状态。
关于c# - 'using' block 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870434/