2016-12-31 31 views
0

說明:調度方法在ASP.NET運行

我開發一個簡單的汽車業務系統,我要實現以下功能:

  1. 一個非常特殊的車型被傳遞到一家店。這個模型中有很多人在等待列表中。
  2. 當汽車到達時,第一個客戶有權購買它,他/她有24小時使用這個機會。

我在數據庫中有一個特殊的狀態,用於確定用戶是否:在等待列表中(我有確切的位置)或可以使用機會購買汽車。每當汽車到達時,我都會運行一個方法來更改等待列表中第一個客戶端的狀態。問題出在這裏:

問題: 客戶可以在24小時內使用他的機會。但是,如果他/她買了車,我最終必須檢查。出於這個原因,我必須安排一種方法在24小時內運行。

可能的解決方案: 我在想兩件事。首先是使用像Hangfire這樣的工作計劃程序。問題是,因爲我的應用程序中沒有任何其他工作,所以我不想爲這樣一個小東西包含整個包。其次是使用異步檢查方法,並讓線程在繼續前24小時睡眠(我不習慣使用線程,這只是一個想法)。我從this文章中獲得了這個想法。請記住,不止一輛汽車可以抵達多個商店。這是否意味着我應該使用很多線程以及它會如何影響系統的性能?

問:

這兩種方案的比較好?

在這種特殊情況下您是否還有另一種可能性?

回答

1

我同意。如果你不打算將它用於許多工作,只導入一個工作包是有點矯枉過正的。

如果您正在運行SQL服務器,我建議你寫一個.NET控制檯應用程序來使用SQL Server代理計劃運行。 (請參閱圖像)如果存儲了需要運行的過程,如果由於某種原因,您不想從.NET應用程序運行它們,您也可以選擇直接從SQL作業運行它們。

因爲它聽起來像你需要這一個數據驅動的調度運行,你可以考慮增加一個觸發尋找每當「特殊」的車被插入到數據庫中你的數據庫的新紀錄。 MSDN SQL Job using Trigger

enter image description here

我做過類似的東西這個地方,每天早上,前營業時間開始一個小時,我運行.NET可執行文件,檢查表A的最新記錄,並把它比作一個值在表B中並確定表A中的記錄是否需要更新。

我也用SQL Server運行的是基於已添加或修改數據庫中的數據的時間表發送電子郵件的工作。

有使用SQL的服務器來運行你的工作優勢有可用來通知您事件的許多選項,重試運行作業失敗,日誌記錄和作業歷史記錄。您可以指定任何類型的時間表,從經常重複到每週僅運行一次。 enter image description here

+0

是的,我正在運行SQL Sever,但它託管在Azure上,就我而言,我不能在那裏使用SQL代理。有沒有一種方法來實現與沒有SQL代理的控制檯應用程序的想法? – StefanL19

+0

啊,我明白了。在這種情況下,您可以查看Azure中的任務計劃程序。我不是Azure專家,但是從描述來看,它與Windows Task Scheduler非常相似(Windows Server上另一個方便的工具)。 https://azure.microsoft.com/en-us/services/scheduler/ 你只需要將所有的邏輯放在你的應用程序中就失敗了,並確保記錄你需要的東西以確保工作順利進行。 – godfathr