2013-09-30 87 views
2

返回我在ASP.NET MVC應用程序以下示例代碼。 我根本無法獲取數據。換句話說,即使我正在等待任務完成,沒有任何事情發生,控制也不會返回到索引操作。 我錯過了什麼?異步伺機不是在所有(.NET 4.5)

public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 

     public async Task<ActionResult> Index() 
     { 
      Task<string> getContentsTask = GetContentsAsync(); 

      string contents = await getContentsTask; 

      return Content("ssss"); 
     } 

     async Task<string> GetContentsAsync() 
     { 
      int sample = 0; 
      HttpClient client = new HttpClient(); 
      Task<string> contents = client.GetStringAsync("http://www.msdn.com"); 

      string data = await contents; 
      return data; 
     } 

    } 

在控制檯應用程序嘗試這樣做,即使在這個應用一旦退出,因爲我稱爲第一的await。

class Program 
    { 
     static void Main(string[] args) 
     { 
      GetContents(); 
     } 
     public static async void GetContents() 
     { 
      Task<string> newTask = GetContentsAsync(); 
      string contents = await newTask; 
      Console.WriteLine(contents); 
      Console.ReadLine(); 
     } 
     public static async Task<string> GetContentsAsync() 
     { 
      HttpClient client = new HttpClient(); 
      Task<string> getStringTask = client.GetStringAsync("http://www.msdn.com"); 
      string content = await getStringTask; 
      return content; 
     } 
    } 

當我給一個Thread.sleep代碼(8000);那麼這工作正常。電話正常返回。

Task<string> getContentsTask = GetContentsAsync(); 
Thread.Sleep(10000); 
string contents = await getContentsTask; 
+1

我相信你做的創建任務和的await之間的什麼東西?否則整個事情有點無意義? – Liam

+2

'Index()'返回一個'Task '。那麼'返回Content(「ssss」);'做什麼? –

+0

我只是通過異步學習我的方式並等待。應用程序不會執行任何操作。 – ckv

回答

0

請確保您使用的是.NET 4.5和你有httpRuntime.targetFramework設置爲4.5app.config