我正在使用.NET 4.5和Entity Framework 6進行MVC 3專案。我的目標是用Entity框架并行地執行幾個資料請求。
我知道在MVC 3中,不支持async await關鍵字,但是部分支持Tasks。
我的問題是:
我怎樣才能在控制器中用Entity Framework并行獲取資料?在MVC 5中,我必須在我的存盤庫和控制器中使用".ToListAsync() "和 "await",但在MVC 3中是不可能的。
我認為最好的解決方案是:
[HttpPost]
public ActionResult Test()
{
var tasks = new List<Task>();
var myRepository = new MyRepository();
List<Object1> object1List = null;
tasks.Add(Task<List<Object1>>.Factory.StartNew(() => object1List = myRepository.GetAll1())。
List<Object2> object2List = null;
tasks.Add(Task<List<Object2>>.Factory.StartNew(() => object2List = myRepository.GetAll2())。
Task.WaitAll(tasks.ToArray())。
}
public class MyRepository
{
/// <summary>
///這個查詢需要~90ms
/// </summary>
public List<Object1> GetAll1()。
{
using (var context = new MyContext())
{
return context.MyTable1.ToList()。
}
}
/// <summary>
///這個查詢需要更多的時間(~400ms)。
/// </summary>
public List<Object2> GetAll2()
{
using (var context = new MyContext())
{
return context.MyTable2.Join(...).Where(...).OrderBy(...) ThenBy(...).ToList()。
}
}
}
這真的是正確的解決方案嗎? 謝謝!
uj5u.com熱心網友回復:
檢查這里的答案。基本上MVC 3不支持async await,但你不應該使用任務工廠。
你需要使用MVC 3的任務分配器庫。
基本上,它說的是你應該用
tasks.Add(Task.Run(() => object1List = myRepository.GetAll1())。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/331319.html
標籤:
