我有一个屏幕,可从远程服务器检索信息并将该信息显示给用户。我希望在显示屏幕时更新此信息(不需要其他用户交互)。
public partial class MyPage : ContentPage
{
protected override async void OnAppearing()
{
base.OnAppearing();
try
{
MyLabel.Text = (await GoGetTheData ()).Stuff;
}
catch (Exception e)
{
MyLabel.Text = "Narg";
}
}
}
这可以接受吗?我已经看过所有有关“异步无效”的弊端的讨论,以及如何仅在事件处理程序中使用它,而这并不是一个事件处理程序。
在这种情况下,由于我(1)在获取所有异步文件之前调用了base.OnAppearing(),并且(2)捕获了我的异常,因此该框架是否可以保证正常工作?
最佳答案
这是可以接受的。添加了对这些框架重写的异步支持的原因。通常有“异步无效”的弊端,但是这种情况并不适用。
但是请注意,您应确保OnAppearing(Forms)
,OnCreate(Android)
和ViewDidLoad(iOS)
方法尽快返回,以便用户获得愉悦的体验。
实际上,您将在许多Forms示例中看到此确切的语法:https://github.com/xamarin/xamarin-forms-samples/search?utf8=%E2%9C%93&q=async+void+OnAppearing