我在我的视图模型中有一个方法
private async void SyncData(SyncMessage syncMessage)
{
if (syncMessage.State == SyncState.SyncContacts)
{
this.SyncContacts();
}
}
private async Task SyncContacts()
{
foreach(var contact in this.AllContacts)
{
// do synchronous data analysis
}
// ...
// AddContacts is an async method
CloudInstance.AddContacts(contactsToUpload);
}
当我从UI命令中调用SyncData
并同步大块数据时,UI会冻结。但是,如果我使用这种方法调用SyncContacts
,则不会出现此问题。
private void SyncData(SyncMessage syncMessage)
{
if (syncMessage.State == SyncState.SyncContacts)
{
Task.Run(() => this.SyncContacts());
}
}
一切都很好。它们不应该是相同的吗?我在想,调用异步方法时不使用await会创建一个新线程。