gpt4 book ai didi

c# - Xamarin.iOS 异步 ViewDidLoad

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:11 25 4
gpt4 key购买 nike

我正在使用 Microsoft 身份验证库和 Azure AD B2C 为我的移动应用程序提供登录信息。这样我就可以提供一个带有异步事件处理程序的按钮,它将启动登录过程:

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

最佳答案

下面是我的做法:

try
{
await app.AcquireTokenSilentAsync(...).ContinueWith(
t =>
{
if (t.Exception != null)
{
t.Exception.Handle(
ex =>
{
if (ex is TaskCanceledException)
{
Console.WriteLine("Task cancelled {0}", ex);
}
else
{
Console.WriteLine(ex);
}
return false;
});
}
},
TaskContinuationOptions.OnlyOnFaulted);;
}
catch(Exception e)
{
/Console.WriteLine(ex);
}

您可以将其封装为扩展方法,这样更易​​于使用。

关于c# - Xamarin.iOS 异步 ViewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38622592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com