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

时间:2013-09-30 13:35:42

标签: c# asp.net-mvc

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

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;
        }

    }

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

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 个答案:

答案 0 :(得分:0)

请确保您使用的是.NET 4.5,并且httpRuntime.targetFramework4.5设置为app.config