在ASP.Net MVC中使用异步

种族主义

我执行了以下挂起并从未返回的操作:

public Task<ActionResult> ManageProfile(ManageProfileMessageId? message)
        {
            ViewBag.StatusMessage =
                message == ManageProfileMessageId.ChangeProfileSuccess
                    ? "Your profile has been updated."
                                : message == ManageProfileMessageId.Error
                                      ? "An error has occurred."
                                      : "";
            ViewBag.ReturnUrl = Url.Action("ManageProfile");

            var user = UserManager.FindByIdAsync(User.Identity.GetUserId());
            var profileModel = new UserProfileViewModel
            {
                Email = user.Email,
                City = user.City,
                Country = user.Country
            };

            return View(profileModel);
        }

但是当我将其转换为:

 public async Task<ActionResult> ManageProfile(ManageProfileMessageId? message)
        {
            ViewBag.StatusMessage =
                message == ManageProfileMessageId.ChangeProfileSuccess
                    ? "Your profile has been updated."
                                : message == ManageProfileMessageId.Error
                                      ? "An error has occurred."
                                      : "";
            ViewBag.ReturnUrl = Url.Action("ManageProfile");

            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            var profileModel = new UserProfileViewModel
            {
                Email = user.Email,
                City = user.City,
                Country = user.Country
            };

            return View(profileModel);
        }

它马上回来了。所以我不确定这是怎么回事?如果返回的方法非常简单,而无需等待FindByIdAsync的结果,那么为什么我没有得到没有任何内容的视图。

因此在我看来,它既没有等待返回:

UserManager.FindByIdAsync(User.Identity.GetUserId());

既不返回空配置文件,也不引发异常。因此,当第一个示例中的内容挂起时,我不知道这里发生了什么。

斯蒂芬·克莱里

我认为您的第一个示例正在使用Result,因此造成了僵局,我在博客上解释了这一僵局

总之,ASP.NET提供了一个“请求上下文”,一次只能允许一个线程进入。使用阻止线程时Result,该线程将锁定在该上下文中。稍后,当FindByIdAsync尝试在该上下文中恢复时,它无法执行,因为其中已经阻塞了另一个线程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 ASP.Net-MVC 中使用异步

来自分类Dev

始终在ASP.NET MVC控制器中使用异步

来自分类Dev

在ASP.NET/MVC/REST中使用异步库的正确方法

来自分类Dev

我无法在 asp.net MVC 中使用异步调用

来自分类Dev

如何在ASP.NET MVC Web应用程序中使用log4net异步记录而不用尽所有可用线程?

来自分类Dev

ASP .NET MVC 5中的异步任务

来自分类Dev

ASP.NET MVC中的异步方法

来自分类Dev

ASP中的异步Web服务。NET MVC

来自分类Dev

ASP中的异步Web服务。NET MVC

来自分类Dev

如何在ASP.NET MVC中使用Dache的CacheClient?

来自分类Dev

如何在ASP.NET MVC中使用部分视图?

来自分类Dev

在Asp.Net Mvc 4中使用Cookie

来自分类Dev

如何在ASP.NET MVC中使用AngularJS?

来自分类Dev

在ASP.NET MVC中使用按位标志

来自分类Dev

在多个项目中使用Asp.net MVC身份

来自分类Dev

在ASP.NET MVC 5中使用mvcSitemap

来自分类Dev

在MVC 4中使用ASP.Net身份

来自分类Dev

如何在ASP.NET MVC中使用ViewModels?

来自分类Dev

在ActionLink for ASP.NET MVC中使用图标,Razor页面

来自分类Dev

在部分视图中使用分页,asp.net mvc

来自分类Dev

在ASP.NET MVC中使用AngularJS显示ModelState错误

来自分类Dev

在ASP.NET MVC Action中使用HttpClient调用SSRS

来自分类Dev

在ASP.NET MVC 4中使用共享视图

来自分类Dev

在asp.net MVC中使用下拉列表进行搜索

来自分类Dev

在ASP.net MVC中使用Twitter Typeahead

来自分类Dev

在ASP.NET MVC 5中使用DropDownListFor的NullReferenceException

来自分类Dev

在ASP.NET MVC中使用ExpandoObject时出错

来自分类Dev

在ASP.Net MVC 6中使用库

来自分类Dev

在ASP.NET MVC中使用Razor的CSS视图模型