簡體   English   中英

實體框架SaveChanges異步

[英]Entity Framework SaveChanges Async

我目前正在研究審計跟蹤功能並使用實體框架。

當前代碼有效,但是需要很長時間才能運行。

public class MyDbContext : DbContext {

  public int SaveChanges() {
    // get changes from ChangeTracker.DetectChanges()

    // generate custom audit trail records

    return base.SaveChanges();
  }
}

我當時想在保存更改后移動審核跟蹤構建並使其異步

public int SaveChanges() {
  // get changes from ChangeTracker.DetectChanges()

  int ret = base.SaveChanges();

  // call async function to create audit

  return ret;
}

我曾嘗試使用async-await,但遇到對象已處置的問題。 我不是很習慣線程/異步調用。

有沒有一種方法可以執行“部分”返回,即父對象獲得所需的返回值以繼續其處理,而對象仍然處於活動狀態/未處置以繼續執行異步任務。

public int SaveChanges() {
  // get changes from ChangeTracker.DetectChanges()

  int ret = base.SaveChanges();

  // partial return ret;

  // continue process in generating audit trail
}

在使用Async Await的情況下,可能無法正常工作,因為后台進程的壽命超過了父進程的生命周期時,您可能會遇到類似的情況。

如果您正在運行框架4.5.2或可以升級到框架4.5.2,則此方案中的最佳選擇是使用QueueBackgroundWorkItem API。以下是使用鏈接

http://codingcanvas.com/using-hostingenvironment-queuebackgroundworkitem-to-run-background-tasks-in-asp-net/

http://blogs.msdn.com/b/webdev/archive/2014/06/04/queuebackgroundworkitem-to-relially-schedule-and-run-long-background-process-in-asp-net.aspx

如果您使用的是框架4.5,則可以按照本文中的建議使用IRegisteredObject實現

http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM