C# 任务2没有';不要等到任务1准备就绪

C# 任务2没有';不要等到任务1准备就绪,c#,xamarin.ios,async-await,C#,Xamarin.ios,Async Await,我正在努力处理视图中的异步/等待任务。 任务1必须在任务2启动之前完成 在任务1中,我进行了一些初始化,并用web服务调用返回的数据填充collectionview(这也是等待的)。初始化此collectionview时,它必须对用户可见,因此我隐藏了加载屏幕。当加载屏幕隐藏时,任务2可以启动 当前,任务1的数据已加载,加载屏幕消失,但任务2不会等到collectionview呈现在屏幕上。当加载屏幕消失时,我看到task2的内容,当task2的内容呈现并可见时,collectionview与内

我正在努力处理视图中的异步/等待任务。 任务1必须在任务2启动之前完成

在任务1中,我进行了一些初始化,并用web服务调用返回的数据填充collectionview(这也是等待的)。初始化此collectionview时,它必须对用户可见,因此我隐藏了加载屏幕。当加载屏幕隐藏时,任务2可以启动

当前,任务1的数据已加载,加载屏幕消失,但任务2不会等到collectionview呈现在屏幕上。当加载屏幕消失时,我看到task2的内容,当task2的内容呈现并可见时,collectionview与内容一起出现

守则:

public async override void ViewDidLoad()
{
    base.ViewDidLoad();

    ShowLoadingScreen();

    await Task1();
    System.Diagnostics.Debug.WriteLine($"-------------- Task1 = DONE");

    HideLoadingScreen();
    System.Diagnostics.Debug.WriteLine($"-------------- HideLoadingScreen = DONE");

    await Task2();
    System.Diagnostics.Debug.WriteLine($"-------------- Task2 = DONE");
}

async Task Task1()
{
    var data = await GetDataTask();
    SetupViewWithData(data);
}

async Task2()
{
    var otherData = await GetOtherDataTask();
    SetupOtherData(otherData);
}

@如果我看到应用程序输出中的调试行的顺序正确,我会怀疑
GetOtherDataTask
是“人为的”async和事实上几乎完全执行而不释放其调用线程-这将是UI线程,需要返回到windows消息循环,然后才能开始处理隐藏加载窗口的消息等。要确认此怀疑,请添加一个
等待任务。延迟(10)介于<代码>HideLoadingScreen()之间
等待任务2()并查看是否一切正常。显然,这只是一种诊断方法,而不是解决问题的正确方法。
ViewDidLoad()
是事件处理程序还是被重写的基本方法?@Damien_不相信者通过添加task.delay,看到任务2中创建的视图设置在任务1中创建的第一个视图之上。所以这不是一个异步/等待错误。