2016-12-05 31 views
0

我想要使用異步返回一個動作並等待點網絡4.5中的功能。 我已經使用了下面的代碼。使用異步和等待返回MVC中的RedirectToAction

public async Task<ActionResult> DisplayDashboard() 
    { 
     await Task.Run(() => 
     { 
      if (true) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       return RedirectToAction("Error", "Home"); 
      } 
     });    
    } 

它給予以下錯誤, 「無法轉換lambda表達式的委託類型‘System.Action’,因爲一些塊的返回類型不隱式轉換爲委託返回類型」。

任何人都可以請建議我如何使用任務執行RedirectToAction。

+0

你是什麼意思_return view **和** redirect to action_? (你不能這樣做) –

+0

請注意,在ASP.NET中使用'Task.Run'會傷害你的性能,因爲你只能從一個線程池線程切換到另一個線程池線程並返回 - 2個無用的線程切換器。 –

回答

0
public async Task<ActionResult> DisplayDashboard() 
    { 
     return await Task.Run<ActionResult>(() => 
     { 
      if (true) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       return View("Index"); 
      } 
     }); 
    } 
0

爲什麼您需要此代碼異步?如果你需要的是讓這個方法返回一個任務,以滿足一些接口要求,然後使用:

public Task<ActionResult> DisplayDashboard() 
{ 
     ActionResult result; 
     if (true) 
     { 
      result = RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      result = View("Index"); 
     } 
     return Task.FromResult(result); 
    } 

Task.Run()實際上會使用不同的線程來你進入它的代碼。這似乎並不需要你這樣做。

+0

我的代碼太大而無法放在這裏。我有一個要求,我必須重定向到操作或使用任務返回視圖。這就是爲什麼我必須使用異步 – Amol