我有一個使用EF進行數據訪問的MVC網站。該應用程序接收數據,運行一系列計算並存儲結果。每批數據可以有幾千條記錄,計算平均需要30秒 - 我想在後臺運行所有這些。在MVC5網站批處理
到目前爲止,我已經使用了Hangfire來觸發批處理。然後我做的:
var queue = new Queue<MyItem>();
// queue is populated ...
while (queue.Any())
{
var item = queue.Dequeue();
var task = Task.Run(() =>
{
using (var context = new MyDbContext())
{
context.MyItem.Add(item);
// Run Calculations
try {
context.SaveChanges();
}
catch {
// Log error
}
}
}
}
當批處理正在運行的網站要麼變得完全沒有反應,或者我收到「基礎提供失敗的開放式」的錯誤。
有沒有更好的方法呢?
做你的網站需要用戶等待響應?你可以運行計算,然後在結果準備好時通知他們(如電子郵件)嗎? – Jasen
如果'MyDbContext'支持異步,則應該使用'await context.SaveChangesAsync()'。這可以釋放你的線程來處理更多的請求。 – i3arnon
@Jasen無需用戶通知。目前有一個等待Task.WhenAll()進行清理和日誌記錄。 – Neil