C# 任务2没有';不要等到任务1准备就绪
我正在努力处理视图中的异步/等待任务。 任务1必须在任务2启动之前完成 在任务1中,我进行了一些初始化,并用web服务调用返回的数据填充collectionview(这也是等待的)。初始化此collectionview时,它必须对用户可见,因此我隐藏了加载屏幕。当加载屏幕隐藏时,任务2可以启动 当前,任务1的数据已加载,加载屏幕消失,但任务2不会等到collectionview呈现在屏幕上。当加载屏幕消失时,我看到task2的内容,当task2的内容呈现并可见时,collectionview与内容一起出现 守则: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与内
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中创建的第一个视图之上。所以这不是一个异步/等待错误。