2
我正在使用Microsoft身份验证库和Azure AD B2C为我的移动应用程序提供登录。与我可以提供一个按钮,一个异步事件处理程序,将启动登录过程:Xamarin.iOS async ViewDidLoad
// iOS example
public override void ViewDidLoad()
{
base.ViewDidLoad();
LoginButton.TouchUpInside += async (sender, e) =>
{
try
{
await app.AcquireTokenAsync(...);
}
catch(Exception e)
{
}
}
}
当第一次打开应用程序,我需要能够默默地记录他们使用AcquireTokenSilentAsync
。我看过很多文档说你不应该在void方法上使用异步,除非它是一个事件处理程序,但在这种情况下,我需要在ViewDidLoad()
上执行它。如果我吞下任何例外,这是可以接受的吗?
// is async void okay in this scenario? if not, where else can I put it?
public async override void ViewDidLoad()
{
base.ViewDidLoad();
try
{
await app.AcquireTokenSilentAsync(...);
}
catch(Exception e)
{
// swallow
}
}
应该这ContinueWith导致TaskCanceledException?这就是我所看到的 – Dismissile
它不应该。在任务完成后,continueWith将被调用。收到的参数是上一个任务。 – Lineker
成功案例导致TaskCanceledException ...至少现在编写代码的方式。 – Dismissile