我有一個asp.net-mvc網站,我正在爲我的ORM使用nhibernate。在asp.net-mvc中,如何在不減緩用戶體驗的情況下運行昂貴的操作?
我有一個當前的控制器操作,執行基本的CRUD更新(查詢數據庫中的項目,然後更新一堆值並提交回數據庫表)。然後它向客戶端返回一個簡單的json響應,以指示成功或錯誤。
public ActionResult UpdateEntity(MyEntity newEntity)
{
var existingEntity = GetFromRepository(newEntity.Id);
UpdateExistingEntity(newEntity, existingEntity);
return Json(SuccessMessage);
}
在某些情況下(假設的承諾,如果某些字段在我的對象更改成功)我現在要引發一些額外的操作(例如發一堆人,並運行生成一個報告,一些代碼),但我不想放慢正在進行更新的用戶的用戶體驗。所以我擔心的是,如果我這樣做:
public ActionResult UpdateEntity(MyEntity newEntity)
{
var existingEntity = GetFromRepository(newEntity.Id);
bool keyFieldsHaveChanged = UpdateExistingEntity(newEntity, existingEntity);
if (keyFieldsHaveChanged)
{
GenerateEmails();
GenerateReports();
}
return Json(SuccessMessage);
}
這對於某人更新的用戶體驗來說太慢了。無論如何(asyngc?)有一個昂貴的操作被控制器動作觸發,但沒有控制器動作因此而減慢?
您可能需要考慮將該工作(電子郵件和報告)加載到單獨的服務。 – 2011-06-06 10:47:40
@IKEA騷亂 - 但我將如何調用。 。生成電子郵件和報告的代碼位於網站控制器中。 。 – leora 2011-06-06 10:59:21
在我工作的應用程序中,我寫了一個標誌回數據庫。一個單獨的程序,在這種情況下是一個系統服務,位於後臺,輪詢數據庫尋找工作。 – 2011-06-06 12:38:20