Могут ли конструкторы быть асинхронными?C#

Место общения программистов C#
Ответить
Anonymous
 Могут ли конструкторы быть асинхронными?

Сообщение Anonymous »

У меня есть проект, в котором я пытаюсь заполнить некоторые данные в конструкторе:

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

public class ViewModel
{
public ObservableCollection Data { get; set; }

async public ViewModel()
{
Data = await GetDataTask();
}

public Task GetDataTask()
{
Task task;

//Create a task which represents getting the data
return task;
}
}
К сожалению, я получаю сообщение об ошибке:


Модификатор async< /code> недействителен для этого элемента


Конечно, если я оберну стандартный метод и вызову его из конструктора:< /p>

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

public async void Foo()
{
Data = await GetDataTask();
}
все работает нормально. Аналогично, если я воспользуюсь старым способом «наизнанку»

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

GetData().ContinueWith(t => Data = t.Result);
Это тоже работает. Мне просто интересно, почему мы не можем вызвать await напрямую из конструктора. Вероятно, существует множество (даже очевидных) крайних случаев и причин против этого, я просто не могу их придумать. Я также искал объяснение, но, похоже, не нашел его.

Подробнее здесь: https://stackoverflow.com/questions/814 ... s-be-async
Ответить

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

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

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

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

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