Xamarin 一个OnAppearing中的等待是否意味着我导航到的屏幕将立即显示?

Xamarin 一个OnAppearing中的等待是否意味着我导航到的屏幕将立即显示?,xamarin,xamarin.forms,Xamarin,Xamarin.forms,如果我有此代码: protected override async void OnAppearing() { base.OnAppearing(); await DoLengthDatabaseTaskAsync(); // takes 30 seconds } 它是异步任务这一事实是否意味着屏幕会快速显示,而不会等待数据库任务完成 protected override async void OnAppearing() {

如果我有此代码:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        await DoLengthDatabaseTaskAsync(); // takes 30 seconds
    }
它是异步任务这一事实是否意味着屏幕会快速显示,而不会等待数据库任务完成

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        await CallAndForgetAboutOutputTaskAsync(); // takes 30 seconds
    }
如果我不关心CallandForgeTaboutOutputAskaSync()方法的完成“调用并忘记”如何

有没有办法在后台运行CallandForgeTabootOutputAskaSync(),以便尽快显示屏幕

是和否

on出现
意味着页面已出现在屏幕上,并立即执行。因此,在那里执行某些操作不会减慢任何速度

但是,您应该记住,
OnAppearing
是在UI线程上执行的,这取决于
callandForgetaboutOutputAskaSync()
的结构,它可能会冻结您的UI,但是
Task.Run的简单魔法可以解决问题

编辑:所以应该是这样的:

Task CallAndForget()
{
  return Task.Run(async() => await action());
}

使用
wait
将执行返回给调用方法,从而释放UI线程。理论上,这将允许用户界面在
callandForgetaboutOutputAskaSync()
执行其任务时保持功能。在这种情况下,不需要使用
Task.Run()

您能举例说明在这种情况下如何使用Task.Run吗?这与使用wait不同吗?@Alan2,这是上面的示例。根据您在方法中所做的操作,它可能与上面所说的不同。
CallAndForget()
不再需要是
async
,并且可以成为
void
方法。您没有等待任务的结果。Run()
@ottermatic我在匆忙中写错了,它不应该是异步方法,谢谢。但它不能是空的,这将是一种非常糟糕的做法。如果它不是
异步的
,它就不需要返回类型为
任务
。在方法中使用返回类型
Task
而不使用
await
是一种不好的做法。在这里,可以通过创建事件和异步事件处理程序来采用相同的方法,这样就不会阻塞UISorry,但与此不同-使用httpclient测试它。。。。它确实是这样工作的。测试它,然后当你发现它不工作时,试着理解你在文档中错了什么细节。