Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步等待根本不返回(.Net 4.5)_C#_Asp.net Mvc - Fatal编程技术网

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

C# 异步等待根本不返回(.Net 4.5),c#,asp.net-mvc,C#,Asp.net Mvc,下面是ASP.NET MVC应用程序中的示例代码。 我根本拿不到数据。换句话说,即使我在等待任务的完成,也不会发生任何事情,控制也不会返回到索引操作。 我错过了什么 public class HomeController : Controller { // // GET: /Home/ public async Task<ActionResult> Index() { Task<s

下面是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;
        }

    }
公共类HomeController:控制器
{
//
//回家/
公共异步任务索引()
{
任务getContentsTask=GetContentsAsync();
字符串内容=等待getContentsTask;
返回内容(“SSS”);
}
异步任务GetContentsAsync()
{
int-sample=0;
HttpClient=新的HttpClient();
任务内容=客户端。GetStringAsync(“http://www.msdn.com");
字符串数据=等待内容;
返回数据;
}
}
在控制台应用程序中尝试了这一点,即使在这个应用程序中,当我调用第一个wait时,应用程序也退出了

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;
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
GetContents();
}
公共静态异步void GetContents()
{
任务newTask=GetContentsAsync();
字符串内容=等待新任务;
控制台写入线(目录);
Console.ReadLine();
}
公共静态异步任务GetContentsAsync()
{
HttpClient=新的HttpClient();
任务getStringTask=client.GetStringAsync(“http://www.msdn.com");
字符串内容=等待getStringTask;
返回内容;
}
}

当我给一个线程。睡眠(8000);那么这就行了。电话回传正确

Task<string> getContentsTask = GetContentsAsync();
Thread.Sleep(10000);
string contents = await getContentsTask;
Task getContentsTask=GetContentsAsync();
睡眠(10000);
字符串内容=等待getContentsTask;

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

我猜您在创建任务和等待之间还做了些什么?否则整个事情就有点毫无意义了?
Index()
返回一个
任务。那么,
返回内容(“sss”)是什么做什么?我只是通过异步和等待来学习我的方法。应用程序没有做任何事情。@JeroenvanLangen他的语法完全有效
Content
返回扩展
ActionResult
的内容,并且
async
关键字自动将其包装为
任务
,该任务在方法中实现
wait
。您使用的是MVC 3还是MVC 4?