[英]Alternative to Task.Run
我有一個ASP.NET MVC 4程序,我在以下代碼中編寫了想要使Results()方法異步的代碼:
public async Task<ActionResult> Results()
{
var result1 = SomeMethodAsync(1);
var result2 = SomeMethodAsync(2);
var result3 = SomeMethodAsync(3);
await Task.WhenAll(result1, result2, result3);
ViewBag.Result1 = result1;
ViewBag.Result2 = result2;
ViewBag.Result3 = result3;
return View()
}
public async Task<int> SomeMethodAsync(int i)
{
//do some logic
//make db call
return await Task.Run( () => DbCall(i));
}
public int DbCall(i)
{
//make db call
return valueFromDb;
}
由於我沒有使用Entityframework 6,因此無法使DbCall()異步。 我讀到在ASP.NET項目中使用Task.Run並不是一個好主意,因為Task.Run將從ASP.Net線程池中借用一個線程,因此可能導致大量請求的排隊問題(因為減少用於處理傳入請求的可用線程數)。
1)如何不使用Task.Run使我的方法異步?
2)同步該方法是否比使用Task.Run更好?
2)同步該方法是否比使用Task.Run更好?
是。
在這種情況下,由於您沒有EF6提供的自然-異步API,因此下一個最佳解決方案是僅同步。
請注意,即使您確實有異步API,單個DbContext
也只能一次處理一次操作。 您必須創建多個上下文才能運行多個同時查詢,這可能會變得很復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.