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