并发访问静态TableAdapter

时间:2014-01-22 06:04:01

标签: c# sql-server multithreading

我有一个异步服务器,它接收来自应用程序的数据请求,服务器为每个请求产生一个线程,该逻辑关闭并执行逻辑并在应用程序完成后向应用程序发送回复。

数据逻辑来自旨在本地计算机上运行的不同版本的软件。请求在客户端处理,数据从SQL服务器流处理。因此,所有使用的表适配器都是静态的,在这种情况下可以正常工作,但会给我的应用程序带来一些问题。

应用程序请求数据,但实际的表适配器逻辑在服务器上完成,因此我们有多个线程访问同一个表适配器并抛出有关该地点的异常。

我很茫然,我已经尝试为每个唯一的线程请求实例化一个新的适配器,但它会导致“命令已被开放表适配器使用”。我也尝试为访问静态适配器的函数生成一个新的AppDomain但它们最终什么都不做/崩溃(不太确定,因为我似乎无法跟踪它们)。

简而言之,尝试跨多个线程访问静态表适配器。任何建议都会有所帮助,但重写数据逻辑并不是真的可行。我很乐意根据要求提供不同细分的代码,但此刻它似乎只是一个理论问题。

1 个答案:

答案 0 :(得分:1)

如果只有一个适配器,那么一次只能有一个线程使用它。因此,您需要同步对它的访问,以便一次只有一个线程可以访问它。您可以在包含'lock'语句的方法中包装对适配器的访问,从而阻止任何后续线程,直到当前线程完成。