我正在尝试了解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自动生成代码的精确副本,除了我硬编码外部凭证。