"使用"块线程是否安全?

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)

我不认为一个线程可以影响定义的连接对象和另一个的"使用中".

use*_*740 7

使用语句与线程安全(或缺少)无关.

它们只是确保Dispose在块结束时调用所使用对象的方法; 但在其他方面等同于手册try..finally Dispose.

在这种特殊情况下:由于在每个线程上打开了一个连接,因此它是"线程安全的".它仍然可能不是原子的.数据库或其他共享状态.