2012-04-28 144 views
4

下面的代碼片段導致了我很難理解的編譯錯誤。MVC4「Can not await」

錯誤1不能等待System.Collections.Generic.List '<BusinessLogic.News>'

有什麼建議?

public class NewsController : Controller 
{ 
    public async Task<ActionResult> Index(int page=1) 
    { 
     NewsNavigator News = new NewsNavigator(); 
     await News.Load(page); 
     ... 

     return View(News); 
    } 
} 



    public List<News> Load(int page = DefaultPage, int pageSize = DefaultPageSize, string filter = DefaultFilter) 
    { 
     //DBLayer_News 
     ... 
     return LoadedNews; 
    } 

回答

7

Await應用於返回任務的方法調用的結果。

因爲新聞不是任務,所以不能在新聞中稱呼它。創建一個任務並將其News.Load方法傳遞給它。

NewsNavigator News = new NewsNavigator(); 
var newsLoadTask = Task.Factory.StartNew(() => News.Load(page)); 
await newsLoadTask; 
... 
+0

是否有更簡單的語法?在C#5.0和mvc4中 – RouR 2012-04-28 05:44:10

+0

嗯,我不確定...你可以讓NewsNavigator類是靜態的並擺脫第一行? – c0deNinja 2012-04-28 22:39:10

+3

您可以隨時使用'await Task.Run((=)=> News.Load(page));' 此外,請確保任何使用者都包含返回類型的dll。當不包含dll時,Visual Studio 2012提供了一個無用的錯誤消息「無法等待<數據類型名稱>」。 – 2013-02-24 21:39:47