Разница между вызовом асинхронного метода и Task. Запуск асинхронного методаC#

Место общения программистов C#
Anonymous
Разница между вызовом асинхронного метода и Task. Запуск асинхронного метода

Сообщение Anonymous »

У меня есть метод в моей модели представления

Код: Выделить всё

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());
}
}
Все в порядке. Разве они не должны быть одинаковыми?
Я думал, что отказ от использования await для вызова асинхронного метода создает новый поток.

Подробнее здесь: https://stackoverflow.com/questions/319 ... ync-method

Вернуться в «C#»