框架覆盖中的C#(Xamarin)"async void"

Bet*_*ker 3 c# asynchronous async-await xamarin

我有一个屏幕,可以从远程服务器检索信息并将该信息显示给用户.我希望在显示屏幕时更新此信息(无需其他用户交互).

public partial class MyPage : ContentPage
{
    protected override async void OnAppearing()
    {
        base.OnAppearing();
        try
        {
            MyLabel.Text = (await GoGetTheData ()).Stuff;
        }
        catch (Exception e)
        {
            MyLabel.Text = "Narg";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以接受吗?我已经看到了关于"异步void"的邪恶的所有讨论,以及它应该如何仅在事件处理程序中使用,而且这不是一个事件处理程序.

在这种情况下,框架是否保证正常,因为我(1)在获得所有异步之前调用了base.OnAppearing(),并且(2)捕获了我的异常?

Jon*_*las 9

这是可以接受的.由于某种原因,添加了对这些框架覆盖的异步支持.一般来说,存在"异步无效"的弊端,但这种情况并不适用.

但需要注意的是,您应该尽快确保您的OnAppearing(Forms),OnCreate(Android)ViewDidLoad(iOS)方法返回,以便您的用户获得愉快的体验.

实际上,您将在大量的Forms示例中看到这种确切的语法:https://github.com/xamarin/xamarin-forms-samples/search?utf8 =% E2%9C%93 &q = async+void + OnAppearing