Разница между вызовом асинхронного метода и 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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