У меня есть метод в моей модели представленияРазница между вызовом метода асинхронной и Task.Run асинхронный метод
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);
}
Когда я называю SyncData
из команд пользовательского интерфейса и я синхронизируется большой кусок интерфейса данных замерзает. Но когда я называю SyncContacts
с этим подходом
private void SyncData(SyncMessage syncMessage)
{
if (syncMessage.State == SyncState.SyncContacts)
{
Task.Run(() => this.SyncContacts());
}
}
Все в порядке. Разве они не должны быть одинаковыми? Я думал, что не использовать ожидание вызова метода async создает новый поток.
'async' не всегда означает, что задействованы другие потоки - см. [нет нити] (http://blog.stephencleary.com/2013/11/there-is-no-thread.html). –
В вашей SyncData отсутствует ключевое слово ожидания, которое сообщит компилятору о продолжении другой обработки. На данный момент ваш метод SyncData должен блокировать, что правильно –