第二个等待声明内部功能从不运行

时间:2014-02-12 00:54:52

标签: c# asynchronous task async-await

我正在尝试了解async / await。我正在查看AccountsController.cs中自动生成的代码。我正试图在控制台应用程序上测试它:

private static async Task DoThis()
{
     MyDataContext db = new MyDataContext();
     UserManager<ApplicationUser> UM = new UserManager<ApplicationUser>(new UserStore(db));
     UserLoginInfo uli = new UserLoginInfo("Facebook", "CXco3k...access_token");

     ApplicationUser user = new ApplicationUser();
     user.UserName = "FB00001";

     IdentityResult r = await UM.CreateAsync(user);
     if (r.Succeeded)
     {
         Console.WriteLine(user.Id.ToString()); // This happens.
         r = await UM.AddLoginAsync(user.Id, uli); // Program sits here forever.

         if (r.Succeeded)
         {
             Console.WriteLine("Login added succeeded.");
         }
         else
         {
             Console.WriteLine("Creation of login Failed: " + r.Errors.FirstOrDefault().ToString());
         }     
     }
}

主要功能是:

static void Main(string[] args)
{
      var res = AdministerFacebook(db);
      Console.ReadLine();
}

也许有些东西我不知道/不了解“嵌套”等待,或者至少有多个等待函数内部。我是否“清除”等待我需要关闭连接或其他什么?

程序运行。我确实得到了新的用户ID,认为第一个等待(创建用户帐户)已经完成,现在,我打电话等待UM.AddLoginAsync似乎没有返回。

如果用Console.WriteLine()替换所有这些return "string";,请让函数返回Task<string>,并在主方法代码中:

var doThisResult = DoThis();
Console.WriteLine(doThis.Result);

程序崩溃,我收到了AggregateException。

我错过了什么?我的意思是,这几乎是VS自动生成代码的精确副本,除了我硬编码外部凭证。

0 个答案:

没有答案