【问题标题】:await not completing in extension method but working in controller等待未在扩展方法中完成但在控制器中工作
【发布时间】:2012-07-18 17:01:09
【问题描述】:

我在控制器中使用异步和等待。

以下代码运行良好

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

但是,如果我尝试在扩展方法中执行相同的代码,则等待永远不会完成。

[HttpPost]
[ValidateAntiForgeryToken]        
public ActionResult Create(CompetitionViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        var user = entityStorage.GetCurrentUser(viewModel.AccessToken).Result;

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;
        }

我正在使用 MVC4,并根据其他线程的建议在我的 web.config 中设置了 &lt;add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /&gt;

谁能告诉我这是为什么以及如何让它发挥作用?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 asynchronous


    【解决方案1】:

    我有一个blog post that covers this in detail

    简而言之,您通过调用Result 导致了死锁。相反,将您的Create 方法设为async 并使用await 获取用户。:

    [HttpPost]
    [ValidateAntiForgeryToken]        
    public async Task<ActionResult> Create(CompetitionViewModel viewModel)
    {
      if (ModelState.IsValid)
      {
        var user = await entityStorage.GetCurrentUser(viewModel.AccessToken);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多