Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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
Asp.net 等待不是在扩展方法中完成,而是在控制器中工作_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Asynchronous - Fatal编程技术网

Asp.net 等待不是在扩展方法中完成,而是在控制器中工作

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

我正在控制器中使用async和Wait

下面的代码工作正常

[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);