在主文件MainPage中我有方法OnAppearing包含两个函数。
MainPage.cs
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;
}
不幸的是,在方法 DataBaseService.checkNoteAlarmTimeActive(); 结束之前,会触发 loadNotes()方法。它在我的应用程序中出现问题。 如何将其更改为 this.loadNotes()等待以前的功能结束工作?
谢谢。 带有metod的类DataBaseService:
{{1}}
答案 0 :(得分:2)
简短的回答是你添加了异步并等待。
protected async override void OnAppearing()
{
await DataBaseService.checkNoteAlarmTimeActive();
this.loadNotes();
base.OnAppearing();
}
答案 1 :(得分:2)
你的CheckNoteAlarmTimeActive()
方法返回void,因此无法可靠地等待它(它基本上是火不会忘记)。
您应该始终返回Task
。
最后要做的是将async
关键字添加到OnApprearing
,这样就可以在其中使用await
(就像Sean Sparkman所说的那样):
//C#
protected async override void OnAppearing()
{
await DataBaseService.checkNoteAlarmTimeActive();
this.loadNotes();
base.OnAppearing();
}
请记住:由于OnAppearing()
也返回void,它会在等待某个东西之后立即返回给调用者(在这种情况下是数据库调用)。因此,生命周期的其余部分将继续,并且方法的其余部分(在await
之后)将仅在完成后发生。