Xamarin,等待异步函数结束
在主文件主页面中,我有一个方法OnAppearing包含两个函数 MainPage.csXamarin,等待异步函数结束,xamarin,async-await,Xamarin,Async Await,在主文件主页面中,我有一个方法OnAppearing包含两个函数 MainPage.cs protected override void OnAppearing() { DataBaseService.checkNoteAlarmTimeActive(); this.loadNotes(); base.OnAppearing(); } 不幸的是
protected override void OnAppearing()
{
DataBaseService.checkNoteAlarmTimeActive();
this.loadNotes();
base.OnAppearing();
}
不幸的是,方法loadNotes()是在方法DataBaseService.checkNoteAlarmTimeActive()之前激发的;末端。我的应用程序出现了一些问题。
如何将其更改为。loadNotes()等待上一个函数结束作业
多谢各位。
使用metod初始化数据库服务:
public static async void checkNoteAlarmTimeActive()
{
List<Note> notes = await getTimeActiveNotes();
foreach(Note note in notes)
{
if(note.AlarmTime < DateTime.Now)
{
note.AlarmTimeActive = false;
updateRecord(note);
}
}
}
public static async Task<List<Note>> getTimeActiveNotes()
{
var notes = await _dbConnect.Table<Note>().Where(i => i.AlarmTimeActive == true).ToListAsync();
return notes;
}
public static async void checknoteArmTimeActive()
{
List notes=wait getTimeActiveNotes();
foreach(注释中的注释)
{
if(note.AlarmTimei.AlarmTimeActive==true).toListSync();
回条;
}
简单的答案是添加async并等待
protected async override void OnAppearing()
{
await DataBaseService.checkNoteAlarmTimeActive();
this.loadNotes();
base.OnAppearing();
}
您的
checknoteArmTimeActive()
方法返回void,因此不能可靠地等待它(基本上是fire and forget)
您应该始终返回Task
最后要做的是将async
关键字添加到onapparring
,这样您就可以在其中使用wait
(如肖恩·斯帕克曼所说):
请记住:由于
OnAppearing()
也会返回void,因此它会在调用方等待某个内容(在本例中是您的数据库调用)之后立即返回给调用方。因此,生命周期的其余部分将继续,方法的其余部分(在等待之后)将只在完成之后发生。您还需要将checkNotAlarmTimeActive的方法签名更改为“public static async Task checknotearmtimeactive()”以等待它。我无法将此方法设置为“OnAppearing()”异步。@Klick:为什么不呢?是的。ContinueWith(…),这正是await在幕后创建的内容。但是,请注意,C#和JavaScript都已转移到async
/await
,这导致代码比Promissions/thenables更干净。
//C#
protected async override void OnAppearing()
{
await DataBaseService.checkNoteAlarmTimeActive();
this.loadNotes();
base.OnAppearing();
}