这是一个与外部设备配合使用的.Net应用程序。当某个实体(对应于表中的行)想要与设备通信时,应该锁定SQL Server表中的相应行,直到设备返回结果或SQL Server超时。
我需要:
最佳做法是什么?
有没有标准化的方法来实现这个目标?
我应该:
在我的C#代码中运行一个新线程(任务)并开始一个可序列化的事务,在事务上选择所需的行并等待时间到达或取消令牌?
或使用sp_getapplock
和...等的某种组合?
答案 0 :(得分:1)
您应该考虑以下几点:
我想说你需要设计你的应用程序才能在这种情况下正常工作,而不只是尝试将这种功能添加为插件。
标题是关于在另一笔交易中发布,但问题中没有真正解释过。
答案 1 :(得分:1)
您无法对事务或会话中的锁进行操作。这种方法不可行。
您需要运行一个事务,并在您希望锁定持续的时间内保持打开状态。
您使用的并行技术并不重要。使用异步ADO.NET IO的异步方法是合适的。那将是一个单独的LongRunning
任务。
您可能需要将CancellationToken
传递给事务代码,该信号在发出信号时会使事务关闭。这样,您就可以实现任意关闭条件,而不会使事务代码混乱。