2016-12-05 6 views
0

ドットネット4.5でAsyncを使用してアクションを返す機能を待っています。 次のコードを使用しました。async&awaitを使用してMVCでRedirectToActionを返す

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

その寄付次のエラー、 「ブロックで戻り値の型のいくつかは、デリゲートの戻り値の型に暗黙的に変換されないため、型 『System.Action』を委任するラムダ式を変換できません」。

タスクを使用してRedirectToActionを実行する方法を誰にでも教えてください。

+0

あなたは_returnビュー**と**リダイレクトされたアクション_を意味しますか? (両方を行うことはできません) –

+0

ASP.NETで 'Task.Run'を使用すると、あるスレッドプールスレッドから別のスレッドプールスレッドに切り替えるだけで、無駄なスレッドスイッチを後で切り替えるため、パフォーマンスが低下することに注意してください。 –

答えて

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

関連する問題