编写C#.NET3.5线程安全数据源类的好方法。该类将连接到SQL Server,每个方法都将执行存储过程。
当代码工作时单线程。我有一个带有私有SqlConnection成员的Singleton DataSource类。每种方法都打开和关闭该连接。当使用多个线程运行它时,在某些情况下连接已被另一个线程打开时会导致麻烦。重写这门课的最佳方法是什么?
注意:DataSource不是指任何内置的.NET类,而是指向控制器提供数据的Model类。
答案 0 :(得分:3)
为什么不直接使用内置的ado.net池:在操作之前创建并打开连接,并为每个方法尽快配置。
答案 1 :(得分:2)
SQL Server已经通过非常复杂的机制协调线程。您不需要执行任何特定的操作来实现线程安全,只需执行存储过程。
答案 2 :(得分:2)
问题似乎来自 Singleton 设计。这仍然有效,只需确保不将连接存储为字段。仅在每种方法中使用局部变量来保持连接。这应该是设计上的线程安全的。
并使它也是例外安全的:
using (var conn = new SqlConnection(...))
{
// call SP
}
答案 3 :(得分:0)
您必须详细说明您的DataSource类应该做什么。如果每个Create / Read / Update / Delete方法都不改变任何状态,则不需要实现任何线程安全代码。
更新:在您的情况下,我建议您只在DataSource类的每个方法中重新创建一个新的SqlConnection
实例,因为ADO.NET已经为您处理了池。