Asp.net 等待不是在扩展方法中完成,而是在控制器中工作
我正在控制器中使用async和Wait 下面的代码工作正常Asp.net 等待不是在扩展方法中完成,而是在控制器中工作,asp.net,asp.net-mvc,asp.net-mvc-3,asynchronous,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asynchronous,我正在控制器中使用async和Wait 下面的代码工作正常 [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> Create(CompetitionViewModel viewModel) { if (ModelState.IsValid) { User user = null; using (var
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(CompetitionViewModel viewModel)
{
if (ModelState.IsValid)
{
User user = null;
using (var facebookClient = new FacebookClient(viewModel.AccessToken))
{
var facebookUser = await facebookClient.Me();
user = entityStorage.GetUser(facebookUser);
FormsAuthentication.SetAuthCookie(user.FacebookId, true);
}
及
公共静态类帮助程序
{
公共异步静态任务GetCurrentUser(此IEntityStorage entityStorage,string accessToken)
{
User=null;
使用(var facebookClient=新facebookClient(accessToken))
{
var facebookUser=wait facebookClient.Me();//卡在这里!!
user=entityStorage.GetUser(facebookUser);
FormsAuthentication.SetAuthCookie(user.FacebookId,true);
}
返回用户;
}
我正在使用MVC4,并根据其他线程的建议在我的web.config中设置了
有人能告诉我为什么会这样以及我如何才能让它工作吗?我有一个问题
简而言之,您通过调用Result
导致死锁。相反,请使您的Create
方法async
并使用wait
获取用户:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(CompetitionViewModel viewModel)
{
if (ModelState.IsValid)
{
var user = await entityStorage.GetCurrentUser(viewModel.AccessToken);
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(CompetitionViewModel viewModel)
{
if(ModelState.IsValid)
{
var user=await entityStorage.GetCurrentUser(viewModel.AccessToken);
public static class Helpers
{
public async static Task<User> GetCurrentUser(this IEntityStorage entityStorage, string accessToken)
{
User user = null;
using (var facebookClient = new FacebookClient(accessToken))
{
var facebookUser = await facebookClient.Me(); //STUCK HERE!!
user = entityStorage.GetUser(facebookUser);
FormsAuthentication.SetAuthCookie(user.FacebookId, true);
}
return user;
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(CompetitionViewModel viewModel)
{
if (ModelState.IsValid)
{
var user = await entityStorage.GetCurrentUser(viewModel.AccessToken);