2016-07-27 119 views
0

我有我的控制器這個方法:如何使用異步任務返回

public async Task<ActionResult> GetDetails(Query query) 
    { 
     var son = await Task.Run(() => 
     { 
      if(query.Export) 
      { 
       return RedirectToAction("GetDetails", "GridToolController"); 
      } 

       if (!query.Export) 
       { 
        db.Configuration.AutoDetectChangesEnabled = false; 
       } 
     } 
    } 

正如你所看到的,我想要去到另一個控制器,但是當我寫的回報,它提供了以下錯誤:

匿名功能轉換成一個空隙返回委託不能 返回一個值

無法lambda表達式轉換爲預期的委託類型,因爲某些 返回類型的S IN塊不隱式轉換 爲委託返回類型

你能告訴我,我怎麼能去到另一個控制器從該控制器?謝謝。

+3

這是整個代碼?請提供整個代碼以及出現錯誤的行。 – Euphoric

+0

重要的是要知道'RedirectToAction'具有哪種返回類型 –

+1

@Euphoric我編輯了這個問題。整個代碼是幾百行。所以我在給出錯誤的地方。 – jason

回答

1

匿名函數轉換爲void返回委託不能返回一個值

該行解釋得很好,你正在創建一個匿名函數() =>返回無效。這可能令人困惑,Task.Run返回一個Task這是不是無效的,但它沒有像Task一般泛型。但是,有一個Task.Run返回Task<TResult>很好,因爲

一些塊的返回類型不隱式轉換爲委託返回類型

你在做其他的代碼在一些地方猜測那些沒有返回RedirectToAction的東西。作爲明確的類型可能不會解決這一點,但應該可以幫助您找到問題,即

var son = await Task.Run<ActionResult>(() => 

您的代碼的其他一些觀點,可能是值得檢查過