C# 异步等待根本不返回(.Net 4.5)
下面是ASP.NET MVC应用程序中的示例代码。 我根本拿不到数据。换句话说,即使我在等待任务的完成,也不会发生任何事情,控制也不会返回到索引操作。 我错过了什么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
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?