异步等待根本不返回(.Net 4.5)

我在ASP.NET MVC应用程序中有以下示例代码。 我根本无法得到数据。 换句话说即使我等待完成任务,也没有任何事情发生,控制永远不会返回到索引操作。 我错过了什么?

public class HomeController : Controller { // // GET: /Home/ public async Task Index() { Task getContentsTask = GetContentsAsync(); string contents = await getContentsTask; return Content("ssss"); } async Task GetContentsAsync() { int sample = 0; HttpClient client = new HttpClient(); Task contents = client.GetStringAsync("http://www.msdn.com"); string data = await contents; return data; } } 

在控制台应用程序中尝试了这一点,甚至在我调用第一个等待时,应用程序退出。

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

当我给一个Thread.Sleep(8000); 然后这工作正常。 调用正确返回。

 Task getContentsTask = GetContentsAsync(); Thread.Sleep(10000); string contents = await getContentsTask; 

请确保您使用的是.NET 4.5,并且在app.config中将httpRuntime.targetFramework设置为4.5