我正在开发一个拍卖网络应用程序。
所有拍卖都有一个结束日期。在那段时间结束时,将根据算法确定获胜者。
我正在尝试找到一种方法来在结束日期时间之后立即确定获胜者。
我可以安排一个代理每隔一段时间完成这项工作。但我喜欢在结束日期时间结束后立即开始该过程。
有没有办法做到这一点?
我正在开发一个拍卖网络应用程序。
所有拍卖都有一个结束日期。在那段时间结束时,将根据算法确定获胜者。
我正在尝试找到一种方法来在结束日期时间之后立即确定获胜者。
我可以安排一个代理每隔一段时间完成这项工作。但我喜欢在结束日期时间结束后立即开始该过程。
有没有办法做到这一点?
SQL Server 有一个叫做 Service Broker 的东西。我认为您可以安排一个作业每隔几秒钟运行一次,以确定哪些记录需要计算算法并将它们发送到服务代理进行处理。处理可能包括计算获胜者,通知获胜者和将物品拍卖的人等。阅读 Bookds Online 中的 Service Broker,我认为这对于您需要做的事情非常方便。
安排代理工作在拍卖结束日期后一点点触发。
您的最佳选择可能是定期检查结束拍卖的 .Net 应用程序,但您也可以使用每 5 分钟运行一次的作业,检查在接下来的 5 分钟内结束的任何拍卖,并使用 WAITFOR DELAY 触发 WinnerAlgorithm proc修饰符。该作业将需要能够触发多个异步作业,以捕获在该 5 分钟时间范围内结束的每个拍卖:
SELECT ID FROM Auction WHERE AlgorithmIsSet = 0 and AuctionEnd < DATEADD(minute, 5, GETDATE()); -- to pull the ones you need to process
UPDATE Auction SET AlgorithmIsSet = 1 WHERE ID = 12345; -- to mark that this one is taken care of.
WAITFOR DELAY "00:04:23"; -- the exact time until the auction ends - you'll need to construct this from DATEDIFF(second, AuctionEnd, GETDATE())
EXEC WinnerAlgorithm; -- after the wait time, the auction is closed and the winner determined.
这使得该过程在拍卖结束后立即运行。我会让这项工作相当有规律地运行,比如每五分钟一次,如果代理服务停止运行或机器重新启动,那么第一个 SELECT 语句将提取任何尚未处理的内容。只要您在出价上加上时间戳,您就可以在事后重建获胜者。
拍卖结束时确定获胜者。您的问题暗示您想在拍卖结束时做一些事情,例如通知获胜者。
将投标插入数据库的应用程序,或者可能是 Windows 服务,可以维护一个计时器设置为在下一次拍卖结束时到期。它唤醒,处理所有已完成的拍卖,确定下一次拍卖到期并再次设置计时器。