簡體   English   中英

替代Task.Run

[英]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.

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