Rya*_*yan 2 c# concurrency multithreading thread-safety
如果我从多个线程调用一些数据访问方法,我是否需要锁定数据库调用周围的代码以确保一致性,或者使用下面的使用语句是原子的吗?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为一个线程可以影响定义的连接对象和另一个的"使用中".
使用语句与线程安全(或缺少)无关.
它们只是确保Dispose在块结束时调用所使用对象的方法; 但在其他方面等同于手册try..finally Dispose.
在这种特殊情况下:由于在每个线程上打开了一个新连接,因此它是"线程安全的".它仍然可能不是原子的.数据库或其他共享状态.